2013-08-26 34 views
0

我有一個使用OpenGL ES 1.1的Android java應用程序,並且遇到以下問題: 當應用程序最小化時,在活動上調用onPause()。在這一點上,我想保留一個GL紋理(我渲染的東西)並將其保存在內存中,同時破壞openGL上下文。然後,當應用程序恢復時,我可以恢復我的紋理。 但是,檢索openGL紋理需要只能由渲染線程完成的GL命令,渲染線程在停止之前可能會或可能不會有更多渲染迭代。在onPause()之後調用openGL函數

有沒有一種已知的方法來處理這個問題?

回答

1

Java中最簡單的方法是使用glReadPixels()將紋理圖像複製到Android位圖。您首先必須將紋理渲染到幀緩衝區中,或渲染到連接到FBO的RenderBuffer中。這種方法會很慢,因爲glReadPixels()速度很慢。此外,Bitmap類不能正確處理alpha紋理圖像,除非它們完全不透明。位圖將它們轉換爲預倍乘格式。

更好的方法是使用本地代碼,它仍然需要調用glReadPixels(),但可以將圖像存儲在正常的內存緩衝區中,而不進行格式轉換。

+0

問題是你不能調用onPause之後調用GL命令,因爲gl命令來自可能已經停止的GLThread。 –

+0

如果您正在使用GLSurfaceView或TextureView,如示例所示,它們爲與命令和主UI線程分開的gl命令提供了一個線程。活動暫停時它們不會停止。 – ClayMontgomery

相關問題