示例#1
0
 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 {}
 }
示例#2
0
        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;
                        }
                    }
                }
            }
        }
示例#3
0
        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;
                        }
                    }
                }
            }
        }
示例#4
0
        public override void BindProgramPassIterationParameters(Graphics.GpuProgramParameters parms)
        {
            GLSLESLinkProgram linkProgram = GLSLESLinkProgramManager.Instance.ActiveLinkProgram;

            linkProgram.UpdatePassIterationUniforms(parms);
        }
示例#5
0
 public override void UpdatePassIterationUniforms(Graphics.GpuProgramParameters parms)
 {
     throw new NotImplementedException();
 }
示例#6
0
 public override void UpdateUniforms(Graphics.GpuProgramParameters parms, int mask, Graphics.GpuProgramType fromProgType)
 {
     throw new NotImplementedException();
 }