除非在按HOME鍵然後繼續的情況下,我的遊戲才能正常工作。需要做些什麼來再次使用紋理?我曾嘗試在GLSurfaceView上調用onPause和onResume(當調用activity的onPause和onResume時)。在簡歷中丟失Android中的OpenGL紋理
任何想法我可能做錯了什麼?
除非在按HOME鍵然後繼續的情況下,我的遊戲才能正常工作。需要做些什麼來再次使用紋理?我曾嘗試在GLSurfaceView上調用onPause和onResume(當調用activity的onPause和onResume時)。在簡歷中丟失Android中的OpenGL紋理
任何想法我可能做錯了什麼?
如果一切都失敗,重新加載紋理:
僞
for tex in textures:
if glIsTexture(tex.opengl_name) == false:
glGenTextures(1, &tex.opengl_name)
glBindTexture(tex.texture_target);
glTexImage(..., texture.image);
我曾試過這個,但由於某種原因,紋理標識似乎混在一起(例如我的字體紋理應用在錯誤的地方)。我會堅持下去,再給它一個 – 2011-05-11 14:56:59
謝謝,讓它工作。新生嬰兒缺乏睡眠導致了一些錯誤。清晰的頭,它效果不錯:) – 2011-05-12 11:35:55
即使你能解決問題,只給一點的解釋,可能幫助別人。
當活動暫停時,Android不保證OpenGL上下文保持活動狀態。
您必須重新創建簡歷上的每個OpenGL資源(紋理在您的情況下,還有VBO等)。
由於API 11,您可以在Android上保留ask kindly的上下文,但是沒有保證。
我沒有重新加載紋理來解決問題。我只是犯了一個錯誤:) – 2012-02-07 11:46:06
你怎麼知道OpenGL是否已經保存了它的上下文以節省不必要的重新加載? – 2014-03-06 12:13:52
剛剛發現了關於getPreserveEGLContextOnPause()。如果這返回true,你保證保持上下文嗎? – 2014-03-06 12:35:12
想後:
這兩種情況都可以解決HOME-resume-black-texture問題。 猜測Android的實現在恢復時無法重新創建EGL上下文。由於onPause/onResume需要調用,因此應始終將setPreserveEGLContextOnPause設置爲true。
你可以寫一些代碼示例嗎? – BadSkillz 2011-05-11 14:34:24
@BadSkillz我不知道什麼代碼是相關的。我的活動/視圖和渲染器?我使用本機代碼加載紋理。需要做些什麼來恢復紋理?我需要從磁盤重新加載嗎? – 2011-05-11 14:44:33