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); } }
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); }
public VertexShaderGenerator(ShaderBinary SHBin) : base(SHBin) { }
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 }; }
public VertexShaderGenerator(ShaderBinary SHBin, bool UseUnsafeNames = true) : base(SHBin, UseUnsafeNames) { }
public GeometryShaderGenerator(ShaderBinary SHBin) : base(SHBin) { }