OpenGL:如果我将新的纹理绑定到另一个目标,纹理会发生啥?

Posted

技术标签:

【中文标题】OpenGL:如果我将新的纹理绑定到另一个目标,纹理会发生啥?【英文标题】:OpenGL: What happens to a texture if I bind a new one to another target?OpenGL:如果我将新的纹理绑定到另一个目标,纹理会发生什么? 【发布时间】:2017-04-28 07:57:09 【问题描述】:

我目前正在学习一些 OpenGL 理论。现在我遇到了一些我无法找到答案的问题。

这是我的一个问题: 假设我将GL_TEXTURE_2D 绑定到单元GL_TEXTURE0,如下所示:

GL.glBindTexture(GL.GL_TEXTURE_2D, myTexture1_ID);

现在我要绑定另一个,但这次是GL_TEXTURE_1D

GL.glBindTexture(GL.GL_TEXTURE_1D, myTexture2_ID);

第一次绑定调用会发生什么? 它是因为相同的纹理单元而解除绑定还是因为不同的纹理目标而保留?

谢谢!

【问题讨论】:

我建议改用glBindTextures。让您一次绑定所有纹理,清除不需要的绑定,并避免在创建后显式指定纹理目标。 【参考方案1】:

只要您不将另一个纹理重新绑定到同一目标,纹理绑定到目标 GL_TEXTURE_2D 就不会受到影响。

您甚至可以通过调用将多个纹理绑定到不同的“纹理单元”

glActiveTexture(GL_TEXTURE0 + i)

在绑定新纹理之前。

【讨论】:

所以理论上我可以同时将 1D、2D 和 3D 纹理绑定到从 0 到 n 的每个单元? @bitQUAKE:是的,您可以同时绑定它们,但不能同时使用它们。给定纹理单元上的纹理目标之间存在优先级,并且只有具有最高优先级的纹理目标被积极使用。 这位网友也解释的很全面:***.com/a/8887844/5790859尤其是“Active Texture”下的部分

以上是关于OpenGL:如果我将新的纹理绑定到另一个目标,纹理会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

将绑定到 FBO 的纹理复制到另一个 OpenGL 上下文

OpenGL中分层渲染和多个渲染目标之间的混淆

OpenGL 帧缓冲绑定目标

为啥从 FBO 解除绑定纹理会清除纹理?

如何将纹理应用到四边形以纹理立方体?

从帧缓冲区对象读取时,OpenGL 纹理坐标是相反的