OpenGL / OpenGL ES中的绑定点是什么?

时间:2015-09-10 21:04:07

标签: opengl opengl-es-2.0 opengl-es-3.0

我正在学习OpenGL / ES。我不清楚绑定点是什么。我查看了OpenGL文档并搜索了互联网,但找不到能够很好地解释绑定点的内容。

以下是绑定点的含义示例。

void glUniformBlockBinding(GLuint程序,     GLuint uniformBlockIndex,     GLuint uniformBlockBinding );

如果您能解释一下绑定点是什么,如何使用它等等,我将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:2)

统一块绑定点的作用方式与纹理单元完全相同。

在着色器中,您引用纹理采样器(例如sampler2D)并通过调用glUniform1i(samplerUniformIndex, textureUnitNumber);将此采样器与纹理单元关联。在使用着色器绘制之前,然后使用textureUnitNumber(设置活动纹理单元)和glActiveTexture的组合将纹理绑定到此glBindTexture,以将纹理绑定到活动纹理单元。所以这里有三个概念:

  1. 绑定点(纹理单元)
  2. 要使用的资源(纹理)
  3. 使用资源的东西(着色器中的采样器制服)
  4. 均匀块的绑定点是相同的。你有:

    1. 统一块绑定点
    2. 要使用的资源。在这种情况下,这是存储统一块数据的缓冲区对象。
    3. 使用资源的东西,它是着色器中的统一块。
    4. 我们可以比较纹理和统一缓冲区对象的使用方式。

      使用资源将绑定点与事物相关联:

      纹理:

      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绑定特定范围的统一缓冲区。