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 EXTは、glEnablei(コアOpenGL 3.0と同等の)同様に機能します。私はあなたがそれらについて話していると仮定します。glBindMultiTextureEXTについても同じことが言えます

少しの命名法が邪魔にならないので、「正しい使用法」が何を意味するのかが完全には明確ではありません。

「Init」コードの目的がGL_TEXTURE_2D最初の4つの固定機能テクスチャユニット全体で固定機能の使用を有効にすることである場合、1と2はそれを行います。3は、現在のテクスチャユニットに対してのみ有効にします。これは、固定機能のテクスチャでのみ使用されることに注意してください。

ここでもう1つのポイントがあります。一般に、初期化ルーチンのように、一連のテクスチャターゲットをグローバルに有効にするだけではありません。これは、シーン全体でレンダリングしているすべてのものが最初の4つのテクスチャユニットで4つの2Dテクスチャを使用している場合にのみ意味があります。一般的に、各オブジェクトの必要に応じてテクスチャターゲットを有効または無効にします。

したがって、初期化で有効化を行わず、レンダリング呼び出しの周囲でターゲットを有効化(および無効化)することが「正しい使用法」であると言えます。

また、これはこの点で直接使用glActiveTextureすることと同じであることに注意してください。したがって、DSAスイッチレスコマンドを使用しているという事実は関係ありません。

于 2012-11-27T18:32:55.053 に答える