{"record":{"id":"3f7ebebb609d5e46","repo":"stride3d/stride","slug":"value-radianceprefilteringggx","errorCode":null,"errorMessage":"value","messagePattern":"value","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"sources/engine/Stride.Rendering/Rendering/ComputeEffect/GGXPrefiltering/RadiancePrefilteringGGX.cs","lineNumber":63,"sourceCode":"        public RadiancePrefilteringGGX(RenderContext context)\n            : base(context, \"RadiancePrefilteringGGX\")\n        {\n            computeShader = new ComputeEffectShader(context) { ShaderSourceName = \"RadiancePrefilteringGGXEffect\" };\n            DoNotFilterHighestLevel = true;\n            samplingsCount = 1024;\n        }\n\n        /// <summary>\n        /// Gets or sets the number of sampling used during the importance sampling\n        /// </summary>\n        /// <remarks>Should be a power of 2 and maximum value is 1024</remarks>\n        public int SamplingsCount\n        {\n            get { return samplingsCount; }\n            set\n            {\n                if (value > 1024)\n                    throw new ArgumentOutOfRangeException(\"value\");\n\n                if (!MathUtil.IsPow2(value))\n                    throw new ArgumentException(\"The provided value should be a power of 2\");\n\n                samplingsCount = Math.Max(1, value);\n            }\n        }\n\n        protected override void DrawCore(RenderDrawContext context)\n        {\n            var output = PrefilteredRadiance;\n            if (output == null || (output.ViewDimension != TextureDimension.Texture2D && output.ViewDimension != TextureDimension.TextureCube) || output.ArraySize != 6)\n                throw new NotSupportedException(\"Only array of 2D textures are currently supported as output\");\n\n            if (!output.IsUnorderedAccess || output.IsRenderTarget)\n                throw new NotSupportedException(\"Only non-rendertarget unordered access textures are supported as output\");\n\n            var input = RadianceMap;","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/engine/Stride.Rendering/Rendering/ComputeEffect/GGXPrefiltering/RadiancePrefilteringGGX.cs#L45-L81","documentation":"RadiancePrefilteringGGX.SamplingsCount setter throws ArgumentOutOfRangeException when the assigned value exceeds 1024. SamplingsCount controls the number of importance-sampled GGX lookups per prefiltered mip; values above 1024 are rejected because the effect's sample loop/constant buffer is designed for at most 1024 samples.","triggerScenarios":"Assigning e.g. environmentRadiancePrefilteringGGX.SamplingsCount = 2048 before rendering.","commonSituations":"Trying to increase prefilter quality beyond the supported maximum; loading a persisted scene/asset that stored an out-of-range sample count; confusion between this property and other engines' unbounded sample counts.","solutions":["Set SamplingsCount to a value <= 1024 (e.g. 512).","Use a power of 2 value such as 128, 256, 512 for the quality/perf tradeoff you need.","Clamp the loaded value: Math.Min(userValue, 1024) before assigning."],"exampleFix":"// before\nprefilter.SamplingsCount = 2048;\n// after\nprefilter.SamplingsCount = Math.Min(2048, 512); // <= 1024, power of 2","handlingStrategy":"validation","validationCode":"if (samplings > 1024)\n    throw new ArgumentOutOfRangeException(nameof(samplings), \"Max SamplingsCount is 1024\");\nprefilter.SamplingsCount = samplings;","typeGuard":"bool IsValidSamplingsCount(int v) => v <= 1024 && MathUtil.IsPow2(v) && v >= 1;","tryCatchPattern":"try { prefilter.SamplingsCount = value; }\ncatch (ArgumentOutOfRangeException ex) { Log.Warning(\"SamplingsCount > 1024, clamping to 1024\"); prefilter.SamplingsCount = 1024; }","preventionTips":["Clamp user/config sample counts to [1, 1024] at load time.","Document the 1024 cap wherever quality settings are exposed.","Prefer 128/256/512 as tested defaults."],"tags":["rendering","pbr","prefiltering","argument-out-of-range","stride"],"backgroundTag":"value-out-of-range","analyzedSha":"96fad776d210c221682aac1ccdf4c79dc046fc38","analyzedAt":"2026-09-14T02:59:31.279Z","contentChangedAt":"2026-09-14T02:59:31.279Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}