Android Activity losing GL Context
Android Activity losing GL Context
我花了几天时间阅读和实施各种解决方案,到目前为止,绝对没有一个工作,所以我现在认为我这里有一个不同的问题。
当我的设备(Nexus 4)旋转或我在返回之前离开应用程序时,屏幕会变为GL视图的透明颜色。
这个使用NDK来做OpenGL绘图。
我有一个类,MainActivity (Pastebin相当大):http://pastebin.com/ZP2hhxpA
(我确实按照一些解决方案的建议重新创建了GLSurfaceView类,但没有解决问题)
如果我启动应用程序而不旋转/离开它,一切都很好,我有一个很好的3D图像引擎,我已经移植到Android,它工作得很好,直到设备旋转,根据人们的情况,只是失去了上下文。
我的本地代码所做的是调用gles2.0函数,不做任何上下文创建,不做任何特殊的,如果我想,我可以把函数移动到Android的Java端在onDrawFrame(),我仍然有这个问题。
我试过了:-设置GLSurfaceView在暂停时不丢失上下文(没有改变)将GLSurfaceView重新创建为一个新类(没有改变)-禁用旋转(不是一个有效的解决方案,暂停时问题仍然存在)
很多人说解决方案是加载纹理并在onSurfaceCreated()方法中创建着色器,这正是我正在做的。这不是纹理未加载的情况,当使用没有纹理的着色器时,屏幕仍然变白,就好像我的对象消失了。
我无法弄清楚如何手动保留上下文,我没有找到任何示例代码,而这个问题是众所周知的和记录的,似乎很少有实际解决方案的代码。
我注意到一个警告信息,当旋转设备时,Nexus 4 GPU驱动程序报告这两个错误中的任何一个(每次重新启动应用程序的变化)在glDrawArrays()调用中每次旋转屏幕:
<core_glHint:84>: GL_INVALID_ENUM
<gl_draw_error_checks:575>: GL_INVALID_OPERATION
这导致我假设我的顶点数组对当前上下文无效,但是我可以保证顶点数组在活动中的onSurfaceCreated()调用上被销毁和重建。
在Nexus 7上,每隔一段时间在旋转/暂停后,它会出现错误:
call to OpenGL ES API with no current context
所以这肯定是一个上下文问题。
我都快把头发扯掉了
从我在你的代码中可以看到,当应用程序暂停时,你正在破坏上下文。参考renderer.Destroy()
@Override
public void onPause() {
super.onPause();
if (renderer != null) {
glSurfaceView.onPause();
renderer.Destroy(); // Deconstruct the native objects + gl textures
}
}
我将尝试删除该调用,因为否则glSurfaceView将有一个引用到渲染器被销毁
- C++错误:"error: int aaa::bbb is protected within this context"
- Visual Studio 19-17 库兼容性根据 GL 标志
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- 将"Compass"与相机旋转隔离开GL
- 是否有一个版本的glCopyImageSubData在Openg GL中使用混合?
- 计算着色器Open GL ES的多个输入
- Open GL ES 3.1 的计算着色器的最小工作示例
- 使用外部依赖项运行 VC++ 单元测试时"Failed to set up execution context"
- 致命错误 C1083:无法打开包含文件:"GL/glew.h":没有此类文件或目录
- C++ 致命错误:glad/gl.h:没有这样的文件或目录
- 打开 gl 精灵类不起作用
- Qt 找不到 GL 库
- 如何在Qt中调用context.getExternalFilesDir
- 'default-initialization in copy-initialization context'在C++中是什么意思?
- GCC 相当于 MSVC 中的 /GS、/GL、/Gy、/Oi、/MD
- 失败的 glewInit:缺少 GL 版本
- 何时在OS X上使用OpenGL vs GL
- 为什么不允许优化器折叠"constant context"?
- "C4649: attributes are ignored in this context"的含义是什么?
- Android Activity losing GL Context