我正在学习 OpenGL/ES。我不清楚绑定(bind)点是什么。我查看了OpenGL文档并在互联网上进行了搜索,但找不到很好地解释绑定(bind)点的东西。
以下是我所说的绑定(bind)点含义的示例。
void glUniformBlockBinding( GLuint 程序, GLuint 统一 block 索引, GLuint uniformBlockBinding);
如果您能解释什么是绑定(bind)点、如何使用等等,我将不胜感激。
最佳答案
统一 block 绑定(bind)点的作用与纹理单元完全相同。
在着色器中,您引用纹理采样器(例如 sampler2D
),并通过调用 glUniform1i(samplerUniformIndex,textureUnitNumber); 将此采样器关联到纹理单元;
。在使用着色器进行绘制之前,您可以使用 glActiveTexture
(用于设置事件纹理单元)和 glBindTexture
的组合将纹理绑定(bind)到此 textureUnitNumber
> 将纹理绑定(bind)到事件纹理单元。所以这里有三个概念:
- 绑定(bind)点(纹理单元)
- 要使用的资源(纹理)
- 使用资源的事物(着色器中的采样器制服)
统一 block 的绑定(bind)点是相同的。你有:
- 统一的 block 绑定(bind)点
- 要使用的资源。在本例中,这是存储统一 block 数据的缓冲区对象。
- 使用资源的事物,即着色器中的统一 block 。
我们可以比较如何使用纹理和统一缓冲区对象。
将绑定(bind)点与使用资源的事物关联起来:
纹理:
GLuint samplerUniformIndex;
glUseProgram(program);
samplerUniformIndex = glGetUniformLocation(program, "mysampler");
glUniform1i(samplerUniformIndex, textureUnitNumber);
统一缓冲区:
GLuint uniformBlockIndex = glGetUniformBlockIndex(program, "myblock");
glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
将资源与其绑定(bind)点关联起来:
纹理:
glActiveTexture(textureUnitNumber);
glBindTexture(textureTarget, texture);
统一缓冲区:
glBindBufferBase(GL_UNIFORM_BUFFER, uniformBlockBinding, uniformBuffer);
或者您可以使用glBindBufferRange
来绑定(bind)统一缓冲区的特定范围。
关于opengl - OpenGL/OpenGL ES 中的绑定(bind)点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32511552/