示例#1
0
        public IBufferRange CreateUniformBufferRange(IUniformBlock uniformBlock)
        {
            var r = new BufferRangeGL(this, uniformBlock);

            Add(r);
            return(r);
        }
 public static IUniformBuffer Create(IUniformBlock uniformBlock)
 {
     /*if(Configuration.useGl1)
      * {
      *  return (IUniformBuffer)new UniformBufferGL1(uniformBlock);
      * }*/
     return((IUniformBuffer) new UniformBufferGL(uniformBlock));
 }
示例#3
0
        public IBufferRange CreateUniformBufferRange(IUniformBlock uniformBlock)
        {
#if false
            var gl = (BufferRangeGL)bufferGL.CreateUniformBufferRange(uniformBlock);
            var rl = (BufferRangeRL)bufferRL.CreateUniformBufferRange(uniformBlock);
            return(new BufferRangeGLRL(gl, rl));
#else
            return((BufferRangeGL)bufferGL.CreateUniformBufferRange(uniformBlock));
#endif
        }
示例#4
0
        public UniformBufferRL(IUniformBlock uniformBlock)
        {
            data = new UniformBufferData(uniformBlock);

            IBuffer buffer = BufferPool.Instance.GetUniformBufferRL(OpenTK.Graphics.OpenGL.BufferUsageHint.DynamicDraw);

            bufferRange      = buffer.CreateUniformBufferRange(uniformBlock);
            bufferRange.Name = uniformBlock.Name;

            Sync();
        }
示例#5
0
 public Material(
     string name,
     IProgram program,
     IUniformBlock uniformBlock
     )
 {
     this.name     = name;
     Program       = program;
     uniformBuffer = UniformBufferFactory.Create(uniformBlock);
     uniformBuffer.Sync();
 }
        public UniformBufferGL(IUniformBlock uniformBlock)
        {
            //  Required always
            data = new UniformBufferData(uniformBlock);

            //  Required for GL3 and OpenRL only
            if (Configuration.canUseUniformBufferObject && (Configuration.useGl1 == false))
            {
                IBuffer buffer = BufferPool.Instance.GetUniformBufferGL(BufferUsageHint.DynamicDraw);
                bufferRange      = buffer.CreateUniformBufferRange(uniformBlock);
                bufferRange.Name = uniformBlock.Name;
                Sync();
            }
        }
示例#7
0
        //  Uniform Buffer
        internal BufferRangeRL(BufferRL buffer, IUniformBlock uniformBlock)
        {
            this.uniformBlock = uniformBlock;
            this.buffer       = buffer;
            unchecked
            {
                this.beginMode = (BeginMode)(uint.MaxValue); // uniform buffers do not have a valid begin mode value
            }
            buffer.Add(this);

            //  Pre-initialize uniform buffer as we do not use BeginEdit() / EndEdit()
            size = uniformBlock.Size;
            data = new byte[size];
        }
示例#8
0
        //  Uniform Buffer
        public BufferRangeGL(BufferGL buffer, IUniformBlock uniformBlock)
        {
#if DEBUG
            if (Configuration.useGl1)
            {
                throw new InvalidOperationException();
            }
#endif
            this.uniformBlock = uniformBlock as UniformBlockGL;
            if (this.uniformBlock == null)
            {
                throw new InvalidOperationException();
            }
            this.buffer = buffer;
            unchecked
            {
                this.beginMode = (BeginMode)(uint.MaxValue); // uniform buffers do not have a valid begin mode value
            }

            //  Pre-initialize uniform buffer as we do not use BeginEdit() / EndEdit()
            size = uniformBlock.Size;
            data = new byte[size];
        }
        public UniformBufferData(IUniformBlock uniformBlock /*, IBufferRange bufferRange*/)
        {
            this.uniformBlock = uniformBlock;
            //this.uniformBufferRange = bufferRange;
            parameterArray = new IUniformValue[uniformBlock.Uniforms.Count];

            int i = 0;

            foreach (var uniform in uniformBlock.Uniforms)
            {
#if DEBUG_UNIFORM_BUFFER
                System.Diagnostics.Debug.WriteLine(
                    uniform.Type.ToString() + " " + uniform.Name +
                    ", index = " + uniform.Index +
                    ", i = " + i +
                    ", offset = " + uniform.Offset +
                    ", stride = " + uniform.Stride
                    );
#endif
                switch (uniform.Type)
                {
                case ActiveUniformType.Float:       parameterArray[i] = new Floats(1, uniform.Count); break;

                case ActiveUniformType.FloatVec2:   parameterArray[i] = new Floats(2, uniform.Count); break;

                case ActiveUniformType.FloatVec3:   parameterArray[i] = new Floats(3, uniform.Count); break;

                case ActiveUniformType.FloatVec4:   parameterArray[i] = new Floats(4, uniform.Count); break;

                case ActiveUniformType.FloatMat4:   parameterArray[i] = new Floats(16, uniform.Count); break;

                case ActiveUniformType.Int:         parameterArray[i] = new Ints(1, uniform.Count); break;

                case ActiveUniformType.UnsignedInt: parameterArray[i] = new UInts(1, uniform.Count); break;

                case ActiveUniformType.Sampler1D: break;

                case ActiveUniformType.Sampler1DArray: break;

                case ActiveUniformType.Sampler1DArrayShadow: break;

                case ActiveUniformType.Sampler1DShadow: break;

                case ActiveUniformType.Sampler2D: break;

                case ActiveUniformType.Sampler2DArray: break;

                case ActiveUniformType.Sampler2DArrayShadow: break;

                case ActiveUniformType.Sampler2DMultisample: break;

                case ActiveUniformType.Sampler2DMultisampleArray: break;

                case ActiveUniformType.Sampler2DRect: break;

                case ActiveUniformType.Sampler2DRectShadow: break;

                case ActiveUniformType.Sampler2DShadow: break;

                case ActiveUniformType.Sampler3D: break;

                case ActiveUniformType.SamplerBuffer: break;

                case ActiveUniformType.SamplerCube: break;

                case ActiveUniformType.SamplerCubeMapArray: break;

                case ActiveUniformType.SamplerCubeMapArrayShadow: break;

                case ActiveUniformType.SamplerCubeShadow: break;

                default:
                {
                    throw new System.Exception("Unsupported uniform type");
                }
                }
                if (parameterArray[i] != null)
                {
                    parameterArray[i].Index  = i;//uniform.Index;
                    parameters[uniform.Name] = parameterArray[i];
                    if (uniform.Default != null)
                    {
                        parameterArray[i].CopyFrom(uniform.Default);
                    }
                }
                i++;
            }
        }
示例#10
0
 public IBufferRange CreateUniformBufferRange(IUniformBlock uniformBlock)
 {
     return(new BufferRangeRL(this, uniformBlock));
 }