{"record":{"id":"2937748eb0d2c7ae","repo":"stride3d/stride","slug":"generic-parameters-are-not-supported-with-0","errorCode":null,"errorMessage":"Generic Parameters are not supported with [{0}]","messagePattern":"Generic Parameters are not supported with \\[(.+?)\\]","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"sources/shaders/Stride.Shaders.Effects/ShaderMixinContext.cs","lineNumber":233,"sourceCode":"        /// Mixins a <see cref=\"ShaderClassSource\" /> identified by its name/generic parameters into the specified mixin tree.\n        /// </summary>\n        /// <param name=\"mixinTree\">The mixin tree.</param>\n        /// <param name=\"name\">The name.</param>\n        /// <param name=\"genericParameters\">The generic parameters.</param>\n        /// <exception cref=\"System.InvalidOperationException\">If the class source doesn't support generic parameters</exception>\n        public void Mixin(ShaderMixinSource mixinTree, string name, params object[] genericParameters)\n        {\n            IShaderMixinBuilder builder;\n            if (!registeredBuilders.TryGetValue(name, out builder))\n            {\n                // Else simply add the name of the shader\n                mixinTree.Mixins.Add(new ShaderClassSource(name, genericParameters));\n            }\n            else if (builder != null)\n            {\n                if (genericParameters != null && genericParameters.Length != 0)\n                {\n                    throw new InvalidOperationException(string.Format(\"Generic Parameters are not supported with [{0}]\", builder.GetType().GetTypeInfo().Name));\n                }\n                builder.Generate(mixinTree, this);\n            }\n        }\n\n        public void PushComposition(ShaderMixinSource mixin, string compositionName, ShaderMixinSource composition)\n        {\n            mixin.AddComposition(compositionName, composition);\n\n            compositionIndices.Push(compositionStringBuilder.Length);\n            if (compositionString != null)\n            {\n                compositionStringBuilder.Insert(0, '.');\n            }\n\n            compositionStringBuilder.Insert(0, compositionName);\n\n            compositionString = compositionStringBuilder.ToString();","sourceCodeStart":215,"sourceCodeEnd":251,"githubUrl":"https://github.com/stride3d/stride/blob/96fad776d210c221682aac1ccdf4c79dc046fc38/sources/shaders/Stride.Shaders.Effects/ShaderMixinContext.cs#L215-L251","documentation":"ShaderMixinContext.Mixin throws InvalidOperationException with message 'Generic Parameters are not supported with [{0}]' when generic parameters are supplied for a shader name that resolves to a registered IShaderMixinBuilder rather than a plain shader class. Generic arguments only apply to ShaderClassSource entries; builders cannot accept them.","triggerScenarios":"Calling ctx.Mixin(mixinTree, name, genericParameters) where name maps to a registered builder and genericParameters is non-empty (Length != 0).","commonSituations":"Passing a builder-registered effect name (like an sdfx effect) with generic type arguments copied from a class-based shader call; misunderstanding which names are builders vs classes.","solutions":["Remove the genericParameters argument when mixing in a registered builder","Register the shader as a ShaderClassSource instead of a builder if generics are needed","Choose the correct name: use the class name for generic shaders, the effect name for builders"],"exampleFix":"// before\ncontext.Mixin(tree, \"TransformationGeneric\", new[] { \"Stride.Rendering.Transformation.TransformationWiggle\" }); // name is a registered builder\n// after\ncontext.Mixin(tree, \"TransformationWiggle\"); // mix the class source directly with no builder indirection","handlingStrategy":"try-catch","validationCode":"if (genericParameters is { Length: > 0 } && registeredBuilders.ContainsKey(name))\n    throw new InvalidOperationException($\"'{name}' is a builder; generic parameters are not supported\");","typeGuard":null,"tryCatchPattern":"try { context.Mixin(tree, name, genericParameters); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"Generic Parameters are not supported\")) { context.Mixin(tree, name); // retry without generics\n}","preventionTips":["Only pass generic parameters for shader class names, not registered builder effects","Know which names are builders vs ShaderClassSources","Default to omitting genericParameters unless mixing a generic class"],"tags":["csharp","generics","mixin","unsupported-operation","shaders"],"backgroundTag":"unsupported-operation","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"}