我正在学习OpenGL / ES。我不清楚绑定点是什么。我查看了OpenGL文档并搜索了互联网,但找不到能够很好地解释绑定点的内容。
以下是绑定点的含义示例。
void glUniformBlockBinding(GLuint程序, GLuint uniformBlockIndex, GLuint uniformBlockBinding );
如果您能解释一下绑定点是什么,如何使用它等等,我将不胜感激。
谢谢。
答案 0 :(得分:2)
统一块绑定点的作用方式与纹理单元完全相同。
在着色器中,您引用纹理采样器(例如sampler2D
)并通过调用glUniform1i(samplerUniformIndex, textureUnitNumber);
将此采样器与纹理单元关联。在使用着色器绘制之前,然后使用textureUnitNumber
(设置活动纹理单元)和glActiveTexture
的组合将纹理绑定到此glBindTexture
,以将纹理绑定到活动纹理单元。所以这里有三个概念:
均匀块的绑定点是相同的。你有:
我们可以比较纹理和统一缓冲区对象的使用方式。
纹理:
GLuint samplerUniformIndex;
glUseProgram(program);
samplerUniformIndex = glGetUniformLocation(program, "mysampler");
glUniform1i(samplerUniformIndex, textureUnitNumber);
统一缓冲区:
GLuint uniformBlockIndex = glGetUniformBlockIndex(program, "myblock");
glUniformBlockIndex(program, uniformBlockIndex, uniformBlockBinding);
纹理:
glActiveTexture(textureUnitNumber);
glBindTexture(textureTarget, texture);
统一缓冲区:
glBindBufferBase(GL_UNIFORM_BUFFER, uniformBlockBinding, uniformBuffer);
或者您可以使用glBindBufferRange
绑定特定范围的统一缓冲区。