回答:
フロントバッファーとバックバッファーをスワップする方法の詳細はプラットフォームごとに異なるため、答えはプラットフォームに依存します。
GLX glXSwapBuffersリファレンスドキュメントによると:
スワップ後、バックバッファの内容は未定義になります。これはウィンドウだけでなくピクセルバッファーにも適用されることに注意してください。
ただし、GLX_EXT_buffer_age拡張機能が存在します。
この拡張機能の目的は、ドライバーが特定のサーフェスに関連付けられたフロントバッファーとバックバッファーのセットをどのように管理して、アプリケーションが古いフレームのコンテンツを再利用し、次のフレーム。
しかし、Win32 SwapBuffersは次のように述べています。
このデバイスコンテキストが参照するウィンドウの現在のピクセル形式にバックバッファーが含まれている場合、関数はフロントバッファーとバックバッファーを交換します...デバイスコンテキストが参照するウィンドウの現在のピクセル形式にバックバッファーが含まれていない場合、これは呼び出しは効果がなく、関数が戻ったときのバックバッファの内容は未定義です。
そして、CGLFlushDrawableは、OS X Core Graphicsで次のように述べています。
バッキングストア属性がfalseに設定されている場合、バッファーはコピーではなく交換できます。これは、フルスクリーンモードの場合によく見られます。レシーバーがダブルバッファーのコンテキストでない場合、この呼び出しは何もしません。
最後に、OpenGL ES標準のバッファスワップ関数eglSwapBuffersで:
eglSwapBuffersを呼び出した後、サーフェスのカラーバッファーは未定義のままになります。
では、これはどういう意味ですか?
GLXとCGLの制約、およびOpenGLとOpenGL ESの間の変更を最小限に抑えたいという要望を踏まえると、コンテンツがごみであると想定することもできます。
動作は定義されていないため、とにかく画面全体を埋める場合は、クリアを削除することを検討してください。ただし、一部の環境(少なくともタイリングアーキテクチャ)では、実際にパフォーマンスが低下します。レンダリング開始時のフルスクリーンクリアは一般的な操作であるため、すべてのターゲットプラットフォームで適切に最適化されていなかったとしたら驚きます。
それが未定義である理由は、多くのアーキテクチャーで、コンテンツの状態を定義することは、標準をどのように定義するかに関係なく、追加のオーバーヘッドになるということです。
そこに何が見つかるかについては、経験に基づいて推測できます。
ほとんどのデスクトップPCビデオハードウェアのようなダブル(またはマルチ)バッファーアーキテクチャでは、「その他の」バッファーデータが見つかる可能性があります。ただし、これは保証されていません。仕様に含まれていないため、奇妙な最適化の恩恵を受けると、データが文字化けします。
タイルアーキテクチャでは、最後のフレームと同じデータ、タイルサイズに基づいて奇妙に文字化けされたデータなど、ほとんどすべてが見つかります。
次に、バッファの定義が期待どおりではないため、奇妙なアーキテクチャ(NDSなど)がいくつかあります。