我正在学习 OpenGL/ES。我不清楚什么是绑定点。我查看了 OpenGL 文档,也搜索了 Internet,但找不到可以很好地解释绑定点的内容。
这是我所说的绑定点的一个例子。
无效glUniformBlockBinding(GLuint程序,GLuint uniformBlockIndex,GLuint uniformBlockBinding);
如果您能解释什么是绑定点、如何使用它等,我将不胜感激。
谢谢你。
我正在学习 OpenGL/ES。我不清楚什么是绑定点。我查看了 OpenGL 文档,也搜索了 Internet,但找不到可以很好地解释绑定点的内容。
这是我所说的绑定点的一个例子。
无效glUniformBlockBinding(GLuint程序,GLuint uniformBlockIndex,GLuint uniformBlockBinding);
如果您能解释什么是绑定点、如何使用它等,我将不胜感激。
谢谢你。
统一块绑定点的行为方式与纹理单元完全相同。
在您的着色器中,您引用一个纹理采样器(例如 a 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
绑定特定范围的统一缓冲区。