/// <summary> /// Bind this uniform buffer object and a uniform block to the same binding point. /// </summary> /// <param name="uniformBlockIndex">index of uniform block got by (glGetUniformBlockIndex).</param> /// <param name="uniformBlockBindingPoint">binding point maintained by OpenGL context.</param> /// <param name="program">shader program.</param> public void Binding(ShaderProgram program, uint uniformBlockIndex, uint uniformBlockBindingPoint) { if (glBindBufferBase == null) { glBindBufferBase = OpenGL.GetDelegateFor<OpenGL.glBindBufferBase>(); } if (glUniformBlockBinding == null) { glUniformBlockBinding = OpenGL.GetDelegateFor<OpenGL.glUniformBlockBinding>(); } glBindBufferBase(OpenGL.GL_UNIFORM_BUFFER, uniformBlockBindingPoint, this.BufferId); glUniformBlockBinding(program.ProgramId, uniformBlockIndex, uniformBlockBindingPoint); }
/// <summary> /// pixel unpack buffer's pointer. /// </summary> /// <param name="bufferId">用glGenBuffers()得到的VBO的Id。<para>Id got from glGenBuffers();</para></param> /// <param name="length">此VBO含有多个个元素?<para>How many elements?</para></param> /// <param name="byteLength">此VBO中的数据在内存中占用多少个字节?<para>How many bytes in this buffer?</para></param> internal UniformBufferPtr( uint bufferId, int length, int byteLength) : base(bufferId, length, byteLength) { if (glUniformBlockBinding == null) { glUniformBlockBinding = OpenGL.GetDelegateFor <OpenGL.glUniformBlockBinding>(); } }
/// <summary> /// Bind this uniform buffer object and a uniform block to the same binding point. /// </summary> /// <param name="uniformBlockIndex">index of uniform block got by (glGetUniformBlockIndex).</param> /// <param name="uniformBlockBindingPoint">binding point maintained by OpenGL context.</param> /// <param name="program">shader program.</param> public void Binding(ShaderProgram program, uint uniformBlockIndex, uint uniformBlockBindingPoint) { if (glBindBufferBase == null) { glBindBufferBase = OpenGL.GetDelegateFor <OpenGL.glBindBufferBase>(); } if (glUniformBlockBinding == null) { glUniformBlockBinding = OpenGL.GetDelegateFor <OpenGL.glUniformBlockBinding>(); } glBindBufferBase(OpenGL.GL_UNIFORM_BUFFER, uniformBlockBindingPoint, this.BufferId); glUniformBlockBinding(program.ProgramId, uniformBlockIndex, uniformBlockBindingPoint); }