public HLSLFixedFunctionProgram() { vertexProgramUsage = new GpuProgramUsage(GpuProgramType.Vertex, null); fragmentProgramUsage = new GpuProgramUsage(GpuProgramType.Fragment, null); fixedFunctionState = new FixedFunctionState(); }
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); }