0

最近、Awesomium を OpenGL アプリケーションに実装しました。Awesomium をテクスチャにロードすると、テクスチャをサーフェスに描画するかどうかに関係なく、OpenGL はそれをシェーディング プロセスに含めます。

テクスチャをシェーダーに処理しているコード行をたどろうとしていますが、OpenGL がすべてのテクスチャにアクセスするために使用する特定の関数や、OpenGL にテクスチャを無視するように指示する方法はありますか?

テクスチャ ブロックを更新する

glBindTexture(GL_TEXTURE_2D, SkypeHUD);
glTexImage2D(GL_TEXTURE_2D, 0, 4, AwesomiumW, AwesomiumH, 0, GL_BGRA, GL_UNSIGNED_BYTE, surface->buffer());

テクスチャ ブロックを作成する

glBindTexture(GL_TEXTURE_2D, SkypeHUD);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glBindTexture(GL_TEXTURE_2D, 0);

テクスチャをロードせずにシーンを描画: http://puu.sh/2bVTV テクスチャをロードした後にシーンを描画: http://puu.sh/2bVUb

Google テクスチャが他のテクスチャにブレンドされていることがわかります。

4

1 に答える 1

0

テクスチャの有効化/無効化は、一部のクライアント バインディング状態ではなく、シェーダー コードによって制御する必要があります。とにかく、おそらく複数のテクスチャ ユニット (glActiveTexture) を使用します。テクスチャ バインディングは各ユニットに個別であるため、この方法を使用する場合は、脚の作業を行い、各ユニットからテクスチャのバインドを解除する必要があります。

于 2013-03-04T13:26:18.433 に答える