我终于找到了为什么在一些三星设备上所有的纹理都显得白皙。
似乎当用户打开游戏时,有时纹理没有加载,用户必须最小化并恢复游戏,以便调用onResume()
方法并再次加载纹理。我的代码只是一个巨大的混乱所以我真的不知道该找到问题的根源并修复它(游戏处于退休阶段,不值得花几天时间),我正在考虑解决这个问题。
所以我的问题是如何检查 OpenGL 是否丢失了上下文?任何变量都会改变它的价值吗?我可以检查上下文中是否存在特定纹理吗?
我知道当应用程序在后台运行时它会丢失它但在我的情况下情况并非如此。
答案 0 :(得分:1)
我不太清楚如何加载纹理。 OnResume应该是一个好的地方,如果你把它们放在onPause ...只是为了在用户离开活动时释放一些内存。无论如何,我坚持你的问题。
在一个简单的例子中,你应该在onSurfaceCreated中初始化你的纹理。另外,不要做这样的事情:
if(texture != null)
texture = initializeTexture();
因为这并不意味着它被加载到opengl内存中,这只是对java对象的引用,这个对象比opengl上下文长得多(特别是如果它是静态的)
一些官方文件:
http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html
EGL背景丢失
在某些情况下,EGL渲染上下文将会丢失。 这通常发生在设备进入睡眠状态后唤醒时。什么时候 EGL上下文丢失,所有OpenGL资源(如纹理)都是如此 与该上下文相关联将被自动删除。在 为了保持正确渲染,渲染器必须重新创建任何丢失 它仍然需要的资源。 onSurfaceCreated(GL10,EGLConfig) 方法是一个方便的地方。