public HLSLFixedFunctionProgram()
 {
     vertexProgramUsage   = new GpuProgramUsage(GpuProgramType.Vertex, null);
     fragmentProgramUsage = new GpuProgramUsage(GpuProgramType.Fragment, null);
     fixedFunctionState   = new FixedFunctionState();
 }
示例#2
0
        protected FixedFunctionPrograms createShaderPrograms(String generatorName,
                                                             VertexBufferDeclaration vertexBufferDeclaration,
                                                             FixedFunctionState state)
        {
            const String vertexProgramName   = "VS";
            const String fragmentProgramName = "FP";

            var shaderGenerator = shaderGeneratorMap[generatorName];
            var shaderSource    = shaderGenerator.GetShaderSource(vertexProgramName, fragmentProgramName,
                                                                  vertexBufferDeclaration, state);

            if (Root.Instance.RenderSystem.ConfigOptions["Save Generated Shaders"].Value == "Yes")
            {
                saveShader(state.GetHashCode().ToString(), shaderSource);
            }

            // Vertex program details
            var vertexProgramUsage = new GpuProgramUsage(GpuProgramType.Vertex, null);
            // Fragment program details
            var fragmentProgramUsage = new GpuProgramUsage(GpuProgramType.Fragment, null);


            HighLevelGpuProgram vs;
            HighLevelGpuProgram fs;

            shaderCount++;

            vs = HighLevelGpuProgramManager.Instance.CreateProgram("VS_" + shaderCount,
                                                                   ResourceGroupManager.DefaultResourceGroupName,
                                                                   shaderGenerator.Language,
                                                                   GpuProgramType.Vertex);
            LogManager.Instance.Write("Created VertexShader {0}", "VS_" + shaderCount);
            vs.Source = shaderSource;
            vs.Properties["entry_point"] = vertexProgramName;
            vs.Properties["target"]      = shaderGenerator.VPTarget;
            vs.Load();

            vertexProgramUsage.Program = vs;
            //vertexProgramUsage.Params = vs.CreateParameters();

            fs = HighLevelGpuProgramManager.Instance.CreateProgram("FS_" + shaderCount,
                                                                   ResourceGroupManager.DefaultResourceGroupName,
                                                                   shaderGenerator.Language,
                                                                   GpuProgramType.Fragment);
            LogManager.Instance.Write("Created FragmentProgram {0}", "FS_" + shaderCount);
            fs.Source = shaderSource;
            fs.Properties["entry_point"] = fragmentProgramName;
            fs.Properties["target"]      = shaderGenerator.FPTarget;
            fs.Load();

            fragmentProgramUsage.Program = fs;
            //fragmentProgramUsage.Params = fs.CreateParameters();


            var newPrograms = shaderGenerator.CreateFixedFunctionPrograms();

            newPrograms.FixedFunctionState   = state;
            newPrograms.FragmentProgramUsage = fragmentProgramUsage;
            newPrograms.VertexProgramUsage   = vertexProgramUsage;


            //then save the new program
            language2State2Declaration2ProgramsMap[generatorName][state][vertexBufferDeclaration] = newPrograms;
            programsToDeleteAtTheEnd.Add(newPrograms);

            return(newPrograms);
        }