public EffectCodeGenerator(
			StitchedEffectSymbol stitchedEffect, ShaderProfile targetShaderProfile,
			TextWriter writer)
		{
			_stitchedEffect = stitchedEffect;
			_targetShaderProfile = targetShaderProfile;
			_output = new ScriptTextWriter(writer);
			_context = new GeneratorContext
			{
				TargetShaderProfile = _targetShaderProfile
			};
		}
Esempio n. 2
0
        private static void WriteVertexInputStructures(EffectCodeGenerator generator,
                                                       TechniqueSymbol technique, TechniquePassSymbol pass, string uniquePassName)
        {
            ScriptTextWriter writer = generator.Writer;

            writer.WriteLine("// -------- vertex input structures --------");

            SemanticGenerator semanticGenerator = new SemanticGenerator("TEXCOORD");

            pass.ForEachFragment(generator, (g, f, s) => WriteVertexInputStructure(g, f, s, semanticGenerator));

            writer.WriteLine("struct {0}_VERTEXINPUT", uniquePassName);
            writer.WriteLine("{");

            pass.ForEachFragment(generator, (g, f, s) => g.Writer.WriteLine("\t{0}_{1}_VERTEXINPUT {1};", uniquePassName, f.UniqueName));

            writer.WriteLine("};");
            writer.WriteLine();
            writer.WriteLine("static {0}_VERTEXINPUT gVertexInput_{0};", uniquePassName);
            writer.WriteLine();
        }
Esempio n. 3
0
        private static void WritePixelOutputStructs(EffectCodeGenerator generator,
                                                    TechniqueSymbol technique, TechniquePassSymbol pass, string uniquePassName)
        {
            ScriptTextWriter writer = generator.Writer;

            writer.WriteLine("// -------- pixel output structures --------");

            SemanticGenerator semanticGenerator = new SemanticGenerator("COLOR", 1);

            pass.ForEachFragment(generator, (g, f, n) => WritePixelOutputStructure(g, f, n, semanticGenerator));

            writer.WriteLine("struct {0}_PIXELOUTPUT", uniquePassName);
            writer.WriteLine("{");
            writer.WriteLine("\tfloat4 color : COLOR0;");
            pass.ForEachFragment(generator, (g, f, s) =>
            {
                if (f.FragmentNode.PixelOutputs != null && f.FragmentNode.PixelOutputs.VariableDeclarations.Any())
                {
                    writer.WriteLine("\t{0}_{1}_PIXELOUTPUT {1};", s, f.UniqueName);
                }
            });
            writer.WriteLine("};");
            writer.WriteLine();
        }