5

補助バッファーに描画するOpenGLプログラムを作成しています。その後、補助バッファーの内容が累積バッファーに蓄積されてから、バックバッファーにGL_RETURNされます(基本的に画面に合成されます)。要するに、私は一種のモーションブラーをやっています。ただし、奇妙なことに、プログラムを再コンパイルして再実行すると、前のプログラムの実行からの補助/累積バッファの内容が表示されていました。これは意味がありません。私は何かを誤解していますか?プログラムの再起動時にOpenGLの状態を完全にリセットするべきではありませんか?

GeForceGo6150のGentooLinuxnVidiaDrivers195.36.31でSDL/OpenGLプログラムを書いています。

4

2 に答える 2

10

いいえ-GPUがメモリをクリアする理由はありません。テクスチャを使用する前に、テクスチャをクリア(または初期化)するのはあなたの責任です。

于 2010-11-06T08:20:13.623 に答える
5

実際には、OpenGL状態は明確に定義された値に初期化されます。

ただし、GL状態は、すべてのバイナリスイッチ(glEnable)、ブレンディング、深度テストモードなどの設定で構成されます。それぞれにデフォルト設定があり、OpenGL仕様で説明されているため、確実に設定できます。コンテキストの作成時に適用されます。

重要なのは、フレームバッファ(またはテクスチャデータや頂点バッファなど)は、いわゆる「GL状態」の一部ではないということです。GL状態はドライバーに「存在します」。GPUメモリに格納されるものはまったく異なるものであり、(GL呼び出しを介して)ドライバに初期化を要求するまで初期化されません。したがって、起動時にクリアまたは初期化しない場合は、以前の実行の残りをテクスチャメモリに、またはフレームバッファ自体に保持することも完全に可能です。

于 2010-11-13T13:14:18.023 に答える