OPENGL纹理丢失的有关问题请问

   阅读
OPENGL纹理丢失的问题请教
先描述一下吧,我目前做的OPENGL游戏在按HOME键退回到主界面后,再进游戏,整个游戏就白屏了,调试后发现回到游戏时会再次调用onSurfaceCreated,于是我在这里面重新加载纹理资源就OK了~~但是RELOAD会使游戏卡上一段时间,不能立刻回到游戏,这样会造成用户体验不好~

我想问的是回到OPENGL界面的时候是不是必须重新RELOAD纹理资源?

但我看到有些OPENGL做的游戏返回的时候非常快,不像RELOAD了资源啊?

请教请教~

多谢指教!

------解决方案--------------------
仔细了解activity的生命周期 你切出去的时候调用的是onstop 可以在这里保存相关数据 切回来的时候是调用resume,可以在resume中重绘,不需要重新加载资源。重新加载资源很耗时间,但重绘却不耗时 可以考虑将资源写成静态的变量,ondestroy的时候释放即可 不过java是自动GC的,要是你有用到jni,则要在那里显式的调用析构
------解决方案--------------------
探讨

仔细了解activity的生命周期 你切出去的时候调用的是onstop 可以在这里保存相关数据 切回来的时候是调用resume,可以在resume中重绘,不需要重新加载资源。重新加载资源很耗时间,但重绘却不耗时 可以考虑将资源写成静态的变量,ondestroy的时候释放即可 不过java是自动GC的,要是你有用到jni,则要在那里显式的调用析构

------解决方案--------------------
onSurfaceCreated被调用意味着所有的GL context数据已全部被释放并重新被创建,onSurfaceCreated被调用的唯一可能,是你的程序重新设置了GL Renderer,也就是调用了GLSurfaceview的setRenderer。
本人长期研究java以下的gles实现和GPU硬件加速,以上分析基于GLSurfaceView的工作原理。
只要你能保证不释放GL view,不重新设置GL Renderer,纹理数据是不会被释放掉的。
试试看吧。有好消息别忘给我散分-:)
------解决方案--------------------
这样看来似乎有点麻烦,一旦stop,GLRenderer就会释放Context,所有的纹理数据也就不复存在。
不过办法还是有的,GLRenderer是通过EGLContextFactory的createContext/destroyContext进行Context创建和释放。而同时GLSurfaceView还提供了另一个接口setEGLContextFactory,允许设置自己的EGLContextFactory。(记得要在SetRenderer之前调用)
这样就有机会在自己的EGLContextFactory上做点手脚,后面就不再细讲了。。。
阅读