gpt4 book ai didi

opengl - OpenGL/OpenGL ES 中的绑定(bind)点是什么?

转载 作者:行者123 更新时间:2023-12-03 03:49:47 25 4
gpt4 key购买 nike

我正在学习 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)到事件纹理单元。所以这里有三个概念:

  1. 绑定(bind)点(纹理单元)
  2. 要使用的资源(纹理)
  3. 使用资源的事物(着色器中的采样器制服)

统一 block 的绑定(bind)点是相同的。你有:

  1. 统一的 block 绑定(bind)点
  2. 要使用的资源。在本例中,这是存储统一 block 数据的缓冲区对象。
  3. 使用资源的事物,即着色器中的统一 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com