0

glBindMultiTexture和的语义是glEnableIndexed什么?

我已经看到它似乎与类似的东西一起glBindMultiTexture使用,例如尽管我不确定它是否需要以及是否替换,或者两者都应该使用?DSA规范似乎没有在.glEnableIndexedglEnable(GL_TEXTURE_2D)glEnable(GL_TEXTURE_2D)glEnableIndexedglBindMultiTextureEXT

正确的用法是什么?

// 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]);
}
4

1 回答 1

0

glEnableIndexed 不存在。但是glEnableIndexed EXTglEnablei和(核心 OpenGL 3.0 等效项)一样。我假设你在谈论他们。glBindMultiTexture EXT也是如此。

既然那一点命名法已经不存在了,那么“正确用法”的含义并不完全清楚。

如果“Init”代码的意图是启用GL_TEXTURE_2D前四个固定功能纹理单元的固定功能使用,那么 1 和 2 将执行此操作。3 只会为当前纹理单元启用它。请注意,这仅适用于固定功能纹理使用。

这就是另一点所在:通常,您不会像在初始化例程中那样简单地全局启用一堆纹理目标。这只有在您在整个场景中渲染的所有内容在前四个纹理单元中使用 4 个 2D 纹理时才有意义。一般来说,您可以根据需要为每个对象启用和禁用纹理目标。

所以我想说,在你的初始化中没有使能,在你的渲染调用周围启用(和禁用)目标是“正确的用法”。

glActiveTexture另外,请注意,这与在这方面直接使用没有什么不同。因此,您使用 DSA 无开关命令这一事实是无关紧要的。

于 2012-11-27T18:32:55.053 回答