public override void BindProgramParameters(Graphics.GpuProgramParameters parms, uint mask) { //Link can throw exceptions, ignore them at this pioont try { GLSLESLinkProgram linkProgram = GLSLESLinkProgramManager.Instance.ActiveLinkProgram; linkProgram.UpdateUniforms(parms, (int)mask, type); } catch {} }
public override void UpdatePassIterationUniforms(Graphics.GpuProgramParameters parms) { if (parms.HasPassIterationNumber) { int index = parms.PassIterationNumberIndex; foreach (var currentUniform in glUniformReferences) { if (index == currentUniform.ConstantDef.PhysicalIndex) { unsafe { GL.Uniform1(currentUniform.Location, 1, parms.GetFloatPointer(index).Pointer.ToFloatPointer()); GLES2Config.GlCheckError(this); //There will only be one multipass entry return; } } } } }
public override void UpdateUniforms(Graphics.GpuProgramParameters parms, int mask, Graphics.GpuProgramType fromProgType) { foreach (var currentUniform in glUniformReferences) { //Only pull values from buffer it's supposed to be in (vertex or fragment) //This method will be called twice, once for vertex program params, //and once for fragment program params. if (fromProgType == currentUniform.SourceProgType) { var def = currentUniform.ConstantDef; if (((int)def.Variability & mask) != 0) { int glArraySize = def.ArraySize; switch (def.ConstantType) { case GpuProgramParameters.GpuConstantType.Float1: unsafe { GL.Uniform1(currentUniform.Location, glArraySize, parms.GetFloatPointer(def.PhysicalIndex).Pointer.ToFloatPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Float2: unsafe { GL.Uniform2(currentUniform.Location, glArraySize, parms.GetFloatPointer(def.PhysicalIndex).Pointer.ToFloatPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Float3: unsafe { GL.Uniform3(currentUniform.Location, glArraySize, parms.GetFloatPointer(def.PhysicalIndex).Pointer.ToFloatPointer()); } break; case GpuProgramParameters.GpuConstantType.Float4: unsafe { GL.Uniform4(currentUniform.Location, glArraySize, parms.GetFloatPointer(def.PhysicalIndex).Pointer.ToFloatPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Matrix_2X2: unsafe { GL.UniformMatrix2(currentUniform.Location, glArraySize, false, parms.GetFloatPointer(def.PhysicalIndex).Pointer.ToFloatPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Matrix_3X3: unsafe { GL.UniformMatrix3(currentUniform.Location, glArraySize, false, parms.GetFloatPointer(def.PhysicalIndex).Pointer.ToFloatPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Matrix_4X4: unsafe { GL.UniformMatrix4(currentUniform.Location, glArraySize, false, parms.GetFloatPointer(def.PhysicalIndex).Pointer.ToFloatPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Int1: unsafe { GL.Uniform1(currentUniform.Location, glArraySize, parms.GetIntPointer(def.PhysicalIndex).Pointer.ToIntPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Int2: unsafe { GL.Uniform2(currentUniform.Location, glArraySize, parms.GetIntPointer(def.PhysicalIndex).Pointer.ToIntPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Int3: unsafe { GL.Uniform3(currentUniform.Location, glArraySize, parms.GetIntPointer(def.PhysicalIndex).Pointer.ToIntPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Int4: unsafe { GL.Uniform4(currentUniform.Location, glArraySize, parms.GetIntPointer(def.PhysicalIndex).Pointer.ToIntPointer()); GLES2Config.GlCheckError(this); } break; case GpuProgramParameters.GpuConstantType.Sampler1D: case GpuProgramParameters.GpuConstantType.Sampler1DShadow: case GpuProgramParameters.GpuConstantType.Sampler2D: case GpuProgramParameters.GpuConstantType.Sampler2DShadow: case GpuProgramParameters.GpuConstantType.Sampler3D: case GpuProgramParameters.GpuConstantType.SamplerCube: //samplers handled like 1-elemnt ints unsafe { GL.Uniform1(currentUniform.Location, 1, parms.GetIntPointer(def.PhysicalIndex).Pointer.ToIntPointer()); GLES2Config.GlCheckError(this); } break; } } } } }
public override void BindProgramPassIterationParameters(Graphics.GpuProgramParameters parms) { GLSLESLinkProgram linkProgram = GLSLESLinkProgramManager.Instance.ActiveLinkProgram; linkProgram.UpdatePassIterationUniforms(parms); }
public override void UpdatePassIterationUniforms(Graphics.GpuProgramParameters parms) { throw new NotImplementedException(); }
public override void UpdateUniforms(Graphics.GpuProgramParameters parms, int mask, Graphics.GpuProgramType fromProgType) { throw new NotImplementedException(); }