2011-11-22 101 views
5

我使用glReadPixelsdrawFrame方法GLSurfaceView.Renderer定期拍攝快照。我需要定期拍攝此快照,以根據我的應用程序要求保存我的數據。glReadPixels使用太慢

但是glReadPixels表現真的很慢並且表現出滯後。以下是我如何使用該方法:

gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb); 

是否有替代方案使用glReadPixels?如何保存圖像而不會造成延遲?

+2

嘿隨機,我想知道你是否以某種方式解決了這個問題?我面臨着類似的glReadPixels瓶頸。我看到伯尼的答案被接受了。 PBOs幫助或轉換顏色格式有幫助嗎? –

回答

10

我不知道這是否可用於android,但也許PBO(像素緩衝區對象)會提高性能。請參閱OpenGL.org thread

但是,不要期待奇蹟!使用1280 * 752 RGBA圖像,您每幀傳輸3.67 MB的數據。我不知道Android的數據,但我敢打賭你正面臨內存帶寬或硬盤寫入瓶頸。如果您減小readPixel的大小並獲得更好的性能,就會發現問題所在。

另外,您是否需要「A」組件?也許讀回RGB更快。嘗試以不同的格式回讀。有些是方式比其他人更快,因爲他們更好地映射到OpenGL內存表示。例如,BGRA可能比RGBA更快。當您請求的格式與OpenGL的格式不匹配時,必須在操作過程中轉換每個像素。