glBindMultiTexture
和 glEnableIndexed
的语义是什么?
我见过 glBindMultiTexture
与 glEnableIndexed
一起使用,它似乎类似于例如glEnable(GL_TEXTURE_2D)
虽然我不确定它是否是必需的,以及它是否取代 glEnable(GL_TEXTURE_2D)
,还是应该同时使用? DSA spec在 glBindMultiTextureEXT
的上下文中似乎没有提及 glEnableIndexed
。
正确的用法是什么?
// Init 1
glEnable(GL_TEXTURE_2D);
for(int n = 0; n < 4; ++n)
glEnableIndexed(GL_TEXTURE_2D, n);
// Init 2
for(int n = 0; n < 4; ++n)
glEnableIndexed(GL_TEXTURE_2D, n);
// Init 3
glEnable(GL_TEXTURE_2D);
// For each frame 1
for(int n = 0; n < 4; ++n)
glBindMultiTexture(GL_TEXTURE0 + n, GL_TEXTURE_2D, textureIds[n]);
// For each frame 2
for(int n = 0; n < 4; ++n)
{
glEnableIndexed(GL_TEXTURE_2D, n);
glBindMultiTexture(GL_TEXTURE0 + n, GL_TEXTURE_2D, textureIds[n]);
}
最佳答案
glEnableIndexed 不存在。然而,glEnableIndexedEXT 会这样做,glEnablei
(核心 OpenGL 3.0 等效项)也会这样做。我假设你正在谈论它们。 glBindMultiTextureEXT 也是如此。
既然这一点术语已经不存在了,那么“正确用法”的含义并不完全清楚。
如果“Init”代码的目的是启用GL_TEXTURE_2D
以在前四个固定功能纹理单元中使用固定功能,则 1 和 2 将执行此操作。 3 只会为当前纹理单元启用它。请注意,这仅适用于固定功能纹理使用。
这就是另一点的意义所在:通常,您不会像初始化例程中那样简单地全局启用一堆纹理目标。仅当您在整个场景中渲染的所有内容在前四个纹理单元中使用 4 个 2D 纹理时,这才有意义。一般来说,您可以根据每个对象的需要启用和禁用纹理目标。
所以我想说,在初始化中不启用并在渲染调用周围启用(和禁用)目标是“正确的用法”。
此外,请注意,在这方面,这与直接使用 glActiveTexture
没有什么不同。因此,您使用 DSA 无开关命令这一事实是无关紧要的。
关于c++ - glBindMultiTexture 和 glEnableIndexed 的语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13587226/