Example #1
0
        public VertexShader(H3DShader Shdr)
        {
            Name = Shdr.Name;

            ShaderBinary SHBin = new ShaderBinary(Shdr.Program);

            bool HasGeometryShader = Shdr.GeoShaderIndex != -1;

            if (Shdr.VtxShaderIndex != -1)
            {
                VtxShaderHandle = GL.CreateShader(ShaderType.VertexShader);

                VertexShaderGenerator VtxShaderGen = new VertexShaderGenerator(SHBin);

                CodeVtx = VtxShaderGen.GetVtxShader(Shdr.VtxShaderIndex, HasGeometryShader, out VtxNames);

                Shader.CompileAndCheck(VtxShaderHandle, CodeVtx);
            }

            if (HasGeometryShader)
            {
                GeoShaderHandle = GL.CreateShader(ShaderType.GeometryShader);

                GeometryShaderGenerator GeoShaderGen = new GeometryShaderGenerator(SHBin);

                CodeGeo = GeoShaderGen.GetGeoShader(Shdr.GeoShaderIndex, VtxNames.Outputs, out GeoNames);

                Shader.CompileAndCheck(GeoShaderHandle, CodeGeo);
            }
        }
Example #2
0
        public ShaderBinary ToShaderBinary()
        {
            ShaderBinary Output = new ShaderBinary();

            Output.Executable = Executable;
            Output.Swizzles   = Swizzles;

            if (VtxShader != null)
            {
                Output.Programs.Add(VtxShader);
            }
            if (GeoShader != null)
            {
                Output.Programs.Add(GeoShader);
            }

            return(Output);
        }
Example #3
0
 public VertexShaderGenerator(ShaderBinary SHBin) : base(SHBin)
 {
 }
Example #4
0
        public ShaderGenerator(ShaderBinary SHBin)
        {
            this.SHBin = SHBin;

            Vec4UniformNames      = new string[96];
            Vec4UniformNamesNoIdx = new string[96];
            IVec4UniformNames     = new string[4];
            BoolUniformNames      = new string[16];
            InputNames            = new string[16];
            OutputNames           = new string[16];

            InstTbl = new GenInstCode[]
            {
                new GenInstCode(GenInst1),  //Add
                new GenInstCode(GenInst1),  //DP3
                new GenInstCode(GenInst1),  //DP4
                new GenInstCode(GenInst1),  //DPH
                new GenInstCode(GenInst1),  //Dst
                new GenInstCode(GenInst1),  //Ex2
                new GenInstCode(GenInst1),  //Lg2
                new GenInstCode(GenInst1u), //LitP
                new GenInstCode(GenInst1),  //Mul
                new GenInstCode(GenInst1),  //SGE
                new GenInstCode(GenInst1),  //SLT
                new GenInstCode(GenInst1u), //Flr
                new GenInstCode(GenInst1),  //Max
                new GenInstCode(GenInst1),  //Min
                new GenInstCode(GenInst1u), //Rcp
                new GenInstCode(GenInst1u), //RSq
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenInst1u), //MovA
                new GenInstCode(GenInst1u), //Mov
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenInst1i), //DPHI
                new GenInstCode(GenInst1i), //DstI
                new GenInstCode(GenInst1i), //SGEI
                new GenInstCode(GenInst1i), //SLTI
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenNOp),    //Invalid?
                new GenInstCode(GenNOp),    //NOp
                new GenInstCode(GenEnd),    //End
                new GenInstCode(GenInst2),  //BreakC
                new GenInstCode(GenInst2),  //Call
                new GenInstCode(GenInst2),  //CallC
                new GenInstCode(GenInst3),  //CallU
                new GenInstCode(GenInst3),  //IfU
                new GenInstCode(GenInst2),  //IfC
                new GenInstCode(GenInst3),  //Loop
                new GenInstCode(GenEmit),   //Emit
                new GenInstCode(SetEmit),   //SetEmit
                new GenInstCode(GenInst2),  //JmpC
                new GenInstCode(GenInst3),  //JmpU
                new GenInstCode(GenCmp),    //Cmp
                new GenInstCode(GenCmp),    //Cmp
                new GenInstCode(GenMAdI),   //MAdI
                new GenInstCode(GenMAdI),   //MAdI
                new GenInstCode(GenMAdI),   //MAdI
                new GenInstCode(GenMAdI),   //MAdI
                new GenInstCode(GenMAdI),   //MAdI
                new GenInstCode(GenMAdI),   //MAdI
                new GenInstCode(GenMAdI),   //MAdI
                new GenInstCode(GenMAdI),   //MAdI
                new GenInstCode(GenMAd),    //MAd
                new GenInstCode(GenMAd),    //MAd
                new GenInstCode(GenMAd),    //MAd
                new GenInstCode(GenMAd),    //MAd
                new GenInstCode(GenMAd),    //MAd
                new GenInstCode(GenMAd),    //MAd
                new GenInstCode(GenMAd),    //MAd
                new GenInstCode(GenMAd)     //MAd
            };
        }
Example #5
0
 public VertexShaderGenerator(ShaderBinary SHBin, bool UseUnsafeNames = true) : base(SHBin, UseUnsafeNames)
 {
 }
Example #6
0
 public GeometryShaderGenerator(ShaderBinary SHBin) : base(SHBin)
 {
 }