0

パラメータを OpenGL 表示リストに渡す方法 (標準または巧妙なトリック) があるかどうか疑問に思っていました。私が言いたいことを明確にするために、例を示しましょう。

次のコードがあるとします。

GLuint l = glGenLists(1);
glNewList(l, GL_COMPILE);
  // ...some OpenGL function calls
  glBindTexture(GL_TEXTURE_2D, some_texture); // <-- here, I want `some_texture' to be a parameter that I can set when calling the display list
  //...some more stuff...
glEndList();

私がやりたいことを達成する方法はありますか?

4

2 に答える 2

3

そうです、バインドされたテクスチャはグローバルな状態であり、テクスチャをバインドしてから表示リストを呼び出した場合、リストが実行されたときにテクスチャは引き続きバインドされている必要があります。

しかし、ディスプレイ リストの使用をやめて、VA/VBO を使用することをお勧めします。

于 2011-04-25T13:03:30.387 に答える
0

それはうまくいきません。特に、仕様と FAQ の両方を注意深く読んでください。

GL は、それを一意に指定する番号を提供することによって、特定の表示リストを (場合によっては繰り返し) 処理するように指示される場合があります。これにより、リスト内のコマンドが通常どおりに実行されます。唯一の例外は、クライアントの状態に依存するコマンドに関するものです。このようなコマンドが表示リストに蓄積されると (つまり、実行時ではなく発行時)、その時点で有効なクライアント状態がコマンドに適用されます。

16.010 表示リストが大量のメモリを消費するのはなぜですか? OpenGL 表示リストは、それを作成した呼び出しシーケンスを再作成するために必要なすべてのデータのコピーを作成する必要があります。

つまり、後でテクスチャのデータ ストアを変更する予定がある場合、違いはありません。OpenGL は独自のコピーを保持して、現在の状態を正確に再現できるようにするためです。

ディスプレイ リストにある種の可変性を持たせる唯一の方法は、ネストされたディスプレイ トリックを使用することですが、Matias Valdenegro が既に提案したように、できる限りディスプレイ リストを使用しないでください。その他の機能 (VBO など) はより柔軟で、同等またはそれ以上のパフォーマンスを備えています。

于 2011-04-25T13:55:59.197 に答える