Example #1
0
        public bool CreateCpuPrograms()
        {
            SortSubRenderStates();

            ProgramSet cProgramSet = CreateProgramSet();
            Program    vsProgram   = ProgramManager.Instance.CreateCpuProgram(GpuProgramType.Vertex);
            Program    psProgram   = ProgramManager.Instance.CreateCpuProgram(GpuProgramType.Fragment);
            Function   vsMainFunc  = null;
            Function   psMainFunc  = null;

            cProgramSet.CpuVertexProgram   = vsProgram;
            cProgramSet.CpuFragmentProgram = psProgram;

            //Create entry point functions
            vsMainFunc = vsProgram.CreateFunction("main", "Vertex Program Entry point", Function.FunctionType.VsMain);
            vsProgram.EntryPointFunction = vsMainFunc;
            psMainFunc = psProgram.CreateFunction("main", "Pixel Program Entry point", Function.FunctionType.PsMain);
            psProgram.EntryPointFunction = psMainFunc;

            for (int i = 0; i < SubRenderStateList.Count; i++)
            {
                SubRenderState srcSubRenderState = SubRenderStateList[i];

                if (srcSubRenderState.CreateCpuSubPrograms(this.programSet) == false)
                {
                    Axiom.Core.LogManager.Instance.Write(
                        "RTShader.TargetRenderState: Could not generate sub render program of type: {0}",
                        srcSubRenderState.Type);
                    return(false);
                }
            }
            return(true);
        }