2011-09-10 31 views
4

私は現在、glReadPixelsを使ってOpenGL ESゲームのスクリーンショットを取得しています。スクリーンショットは素晴らしいですが、glReadPixelsへの電話は、ゲーム内の小さな吃音を引き起こします。glReadPixels(OpenGL ES)の代わりにglCopyTexImage2D

glCopyTexImage2Dが、glReadPixelsのより効率的な置き換えとして提案されました。 glCopyTexImage2Dはどのように機能しますか?いくつかのコンテキストでは私はthis Apple methodを使用しています。

私は、OpenGLは比較​​的新しいので、任意のヘルプは非常に

答えて

12

時間遅延は、GPUとCPUの間で大量のメモリを転送することによって引き起こされ:-)高く評価されています。これは、フレームごとにちょっとしたチャンクで転送することで解決できます。しかし、一連のフレームにわたってフレームバッファから読み込むと、その間に画像が変化します。

ビデオRAMをビデオRAMにコピーすると(非常に速い)、それを少しずつ転送すると変更されません。

+0

VRAMからVRAMへのコピーはどのように機能しますか?フレームバッファの内容をコピーしていますか?おそらく私はglCopyTexImage2Dを使用できますか? – SundayMonday

+1

@MrMusic:はい、フレームバッファから代替バッファにコピーしています。 OpenGLのバージョンによっては、VRAM-VRAMのコピーにauxバッファ(glDrawBuffer'と 'glReadBuffer' +' glCopyPixels')を使用し、各フレームのCPUにチャンクを引き出す 'glReadBuffer' +' glReadPixels' )。 OpenGLの新しいバージョンでは、VBOを使うことができますが、OpenGL ESを使用しているので、まず古い方法を試してみてください。 –

+0

+1私はばかみたいに感じる – slf