まず、
Windows XP SP3、2GB RAM、Intel Core 2 Duo 2.33 GHz、nVidia 9600GT 1GB RAM。OpenGL 3.3 が完全に更新されました。
私がやっていることの簡単な説明:
理想的には、フレームごとに glTexSubImage2D を使用して GL テクスチャ (A) に 1 つのピクセルを配置する必要があります。
次に、shader-FBO-quadfacingcamera セットアップ内のテクスチャを変更し、元の画像を結果の FBO に置き換えます。
もちろん、FBO フィードバック ループは必要ありません。代わりに、変更したバージョンを一時的なテクスチャ内に配置し、glCopyTexSubImage2D を使用して個別に更新を行います。
シーケンスは次のとおりです。
1) フレームごとに glTexSubImage2D を使用して GL テクスチャ (A) に 1 ピクセルを配置します (幅 = 高さ = 1)。
2) この変更されたバージョン A は、別のテクスチャ (B) にレンダリングされるシェーダー FBO クワッド セットアップ内で使用/変更されます。
3) 結果のテクスチャ B は、glCopyTexSubImage2D を使用して A の上に上書きされます。
4) 繰り返す...
このループを繰り返すことで、フレームごとにシェーダーのカラー値に 0.99 を掛けて、ゆっくりとしたフェード効果を実現したいと考えています。
2 つの点が大きく間違っています
。1) フレームごとに 0.99 のフェード係数が繰り返されると、フェードは RGB 48、48、48 で停止します。したがって、完全にフェードアウトしない灰色がかったピクセルの跡が残ります。
2) プログラムは 100 FPS で実行されます。ひどい。glCopyTexSubImage2D をコメントアウトすると、プログラムは 1000 FPS になるからです!!
glTexSubImage2D だけをコメントアウトし、glCopyTexSubImage2D をそのままにしておくことでも、1000 FPS を達成しています。この事実は、glTexSubImage2D と glCopyTexSubImage2D 自体がボトルネックではないことを明確にするためのものです (コピーを行うために glCopyTexSubImage2D をセカンダリ FBO に置き換えようとしましたが、同じ結果になりました)。
観察: ボトルネックは、これらのコマンドが両方とも機能していることを示しています!
ハードモード: PBO なし pls.
ソースと exe へのリンク:
http://www.mediafire.com/?ymu4v042a1aaha3
(CodeBlocks と SDL を使用)
FPS カウントは stdout.txt に書き込まれます
そこで公開されている 2 つの問題の回避策をお願いします。
期待される結果: 800 ~ 1000 FPS で完全なフェードアウト効果がプレーンな黒になります。