我刚开始为 iPhone 编写 OpenGL ES。我正在尝试渲染 yuv 纹理,但对纹理单元的概念感到非常困惑。
如果我用不同的组合更改 glUniform1i 的第二个参数,则生成的图像会有所不同。我的问题是这个 0 或 1 个纹理单元是如何配置的?正确的使用方法是什么?
编辑: 愚蠢的我...忘了叫这个:
glTexParameteri(GL_TEXTURE_2D, GL_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_MAG_FILTER, GL_NEAREST);
最佳答案
您可以使用如下代码将纹理绑定(bind)到可用的纹理单元:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture2);
当然,这假设您已正确配置 texture1
和 texture2
。
当需要将纹理绑定(bind)到着色器时,您可以使用如下代码指定特定纹理绑定(bind)到哪个纹理单元:
glUniform1i(texture1Index, 0);
glUniform1i(texture2Index, 1);
其中 texture1Index
和 texture2Index
是适合您的着色器的相应制服的索引。 0 和 1 对应于我们之前绑定(bind)纹理的纹理单元。
关于iPhone OpenGL ES 纹理单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8366033/