{"record":{"id":"ff8499878f313dce","repo":"stride3d/stride","slug":"msaaresolvershadername","errorCode":null,"errorMessage":"msaaResolverShaderName","messagePattern":"msaaResolverShaderName","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"sources/engine/Stride.Rendering/Rendering/Compositing/MSAAResolver.cs","lineNumber":115,"sourceCode":"        public float FilterRadius { get; set; } = 1.0f;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"MSAAResolver\"/> class.\n        /// </summary>\n        public MSAAResolver()\n            : this(\"MSAAResolverEffect\", \"MSAADepthResolverEffect\")\n        {\n        }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"MSAAResolver\"/> class.\n        /// </summary>\n        /// <param name=\"msaaResolverShaderName\">Name of the MSAA resolve pass shader.</param>\n        /// <param name=\"msaaDepthResolverShaderName\">Name of the MSAA depth resolve pass shader.</param>\n        public MSAAResolver(string msaaResolverShaderName, string msaaDepthResolverShaderName)\n            : base(msaaResolverShaderName)\n        {\n            if (msaaResolverShaderName == null) throw new ArgumentNullException(nameof(msaaResolverShaderName));\n            if (msaaDepthResolverShaderName == null) throw new ArgumentNullException(nameof(msaaDepthResolverShaderName));\n\n            msaaResolver = new ImageEffectShader(msaaResolverShaderName);\n            msaaDepthResolver = new ImageEffectShader(msaaDepthResolverShaderName);\n\n            EnableSetRenderTargets = false;\n        }\n\n        /// <summary>\n        /// Resolves the specified input multisampled texture.\n        /// </summary>\n        /// <param name=\"drawContext\">The draw context.</param>\n        /// <param name=\"input\">The input.</param>\n        /// <param name=\"output\">The output.</param>\n        public void Resolve(RenderDrawContext drawContext, Texture input, Texture output)\n        {\n            SetInput(0, input);\n            SetOutput(output);","sourceCodeStart":97,"sourceCodeEnd":133,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/engine/Stride.Rendering/Rendering/Compositing/MSAAResolver.cs#L97-L133","documentation":"The MSAAResolver constructor takes the names of the MSAA color-resolve and depth-resolve shaders and rejects a null color-resolve name with ArgumentNullException(msaaResolverShaderName). Both shader names are required to construct the resolve ImageEffectShaders.","triggerScenarios":"new MSAAResolver(null, someDepthShaderName) — passing null (uninitialized constant, failed config lookup) as the first constructor argument.","commonSituations":"Config-driven shader name lookups returning null when a shader key is missing; refactoring where the shader name constant was removed; DI containers injecting null defaults.","solutions":["Pass a valid resolve shader name, e.g. new MSAAResolver(\"MSAAResolverShader\", \"MSAADepthResolverShader\")","Fix the config/settings source that produced a null shader name","Guard the call site and throw a descriptive error before constructing MSAAResolver"],"exampleFix":"// before\nnew MSAAResolver(null, \"MSAADepthResolverShader\");\n// after\nnew MSAAResolver(\"MSAAResolverShader\", \"MSAADepthResolverShader\");","handlingStrategy":"validation","validationCode":"if (msaaResolverShaderName == null)\n    throw new InvalidOperationException(\"MSAA resolve shader name is required\");\nvar resolver = new MSAAResolver(msaaResolverShaderName, msaaDepthResolverShaderName);","typeGuard":"static bool HasRequiredShaderNames((string color, string depth) shaders) =>\n    !string.IsNullOrEmpty(shaders.color) && !string.IsNullOrEmpty(shaders.depth);","tryCatchPattern":"try { resolver = new MSAAResolver(name, depthName); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"msaaResolverShaderName\") {\n    // load default shader name from settings before retrying\n}","preventionTips":["Centralize shader name constants; never pass config lookups straight into the constructor","Use string.IsNullOrWhiteSpace checks on settings before constructing graphics effects","Fail fast at config load time when required shader keys are absent"],"tags":["csharp","rendering","msaa"],"backgroundTag":"null-argument","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"}