我正在学习OpenGL/ES。我不清楚绑定点是什么。我查看了OpenGL文档并在互联网上搜索,但找不到一个很好地解释绑定点的东西。
这里有一个绑定点的例子。
void glUniformBlockBinding( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
如果您能解释一下绑定点是什么,它如何使用等等,我将不胜感激。
我正在学习OpenGL/ES。我不清楚绑定点是什么。我查看了OpenGL文档并在互联网上搜索,但找不到一个很好地解释绑定点的东西。
这里有一个绑定点的例子。
void glUniformBlockBinding( GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);
如果您能解释一下绑定点是什么,它如何使用等等,我将不胜感激。
统一块绑定点的作用与纹理单元完全相同。
在您的着色器中,您引用一个纹理采样器(例如sampler2D
),并通过调用glUniform1i(samplerUniformIndex, textureUnitNumber);
将此采样器与纹理单元相关联。在使用着色器进行绘制之前,您需要使用glActiveTexture
(设置活动纹理单元)和glBindTexture
将纹理绑定到此textureUnitNumber
。因此,这里有三个概念:
统一块的绑定点也是如此。您有:
我们可以比较一下纹理和统一缓冲对象的使用方法。
GLuint samplerUniformIndex;
glUseProgram(program);
samplerUniformIndex = glGetUniformLocation(program, "mysampler");
glUniform1i(samplerUniformIndex, textureUnitNumber);
统一缓冲区:
GLuint uniformBlockIndex = glGetUniformBlockIndex(program, "myblock");
glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
纹理(Texture):
glActiveTexture(textureUnitNumber);
glBindTexture(textureTarget, texture);
统一缓冲区:
glBindBufferBase(GL_UNIFORM_BUFFER, uniformBlockBinding, uniformBuffer);
或者您可以使用glBindBufferRange
来绑定一个特定范围的统一缓冲区。