- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在使用 GLSurfaceView
启动某些 Activity 期间尝试快速按下后退按钮时, eglCreateWindowSurface
失败 java.lang.IllegalArgumentException
.
我遇到了以下错误:
10-08 18:05:36.490: E/GLSurfaceView(3440): eglCreateWindowSurface
10-08 18:05:36.490: E/GLSurfaceView(3440): java.lang.IllegalArgumentException: Make sure the SurfaceView or associated SurfaceHolder has a valid Surface
10-08 18:05:36.490: E/GLSurfaceView(3440): at com.google.android.gles_jni.EGLImpl._eglCreateWindowSurface(Native Method)
10-08 18:05:36.490: E/GLSurfaceView(3440): at com.google.android.gles_jni.EGLImpl.eglCreateWindowSurface(EGLImpl.java:90)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$DefaultWindowSurfaceFactory.createWindowSurface(GLSurfaceView.java:798)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$EglHelper.createSurface(GLSurfaceView.java:1065)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1433)
10-08 18:05:36.490: E/GLSurfaceView(3440): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1216)
这些 Activity 在 SurfaceHolder.Callback.surfaceCreated
之前没有调用 GL 操作或在 SurfaceHolder.Callback.surfaceDestroyed
之后.
有没有其他人遇到过这个问题,解决方案是什么?
感谢任何预付款。
最佳答案
在多个 Activity 之间切换会快速撕裂窗口表面。
我修补了 GLSurfaceView.guardedRun()
以避免 GLSurfaceView
的竞争条件
来自:
if (createEglSurface) {
if (LOG_SURFACE) {
Log.w("GLThread", "egl createSurface");
}
gl = (GL10) mEglHelper.createSurface(getHolder());
if (gl == null) {
// Couldn't create a surface. Quit quietly.
break;
}
sGLThreadManager.checkGLDriver(gl);
createEglSurface = false;
}
到:
if (createEglSurface) {
if (LOG_SURFACE) {
Log.w("GLThread", "egl createSurface");
}
gl = (GL10) mEglHelper.createSurface(getHolder());
if (gl == null) {
// If we escape, GLThread ends up. Don't escape.
continue;
}
sGLThreadManager.checkGLDriver(gl);
createEglSurface = false;
}
在我看来这个问题是 fixed in JellyBean .
关于android - eglCreateWindowSurface 因 java.lang.IllegalArgumentException 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12855103/
当 android:hardwareAccelerated 设置为 false 到 list 文件中时,我只有最新的 Samsung Galaxy 系列才会出现问题 据我所知(我自己尝试过)它发生在
在 Samsung Galaxy S6 上安装后第一次打开应用程序时出现 eglCreateWindowSurface GL Error EGL_BAD_ALLOC 并且相同的代码在其他设备上工作正常
在使用 GLSurfaceView 启动某些 Activity 期间尝试快速按下后退按钮时, eglCreateWindowSurface失败 java.lang.IllegalArgumentExc
我有一个有趣的事件,一个应用程序正在开发中,在 Android 的原生 NDK C++ 上使用 OpenGL ES。程序编译运行没有问题。但是,如果我决定进行单元测试并调试代码,它会报错并显示以下消息
我正在尝试让基于 NDK 的游戏在 Android ICS 上运行。它在 Honeycomb 和 Gingerbread 上运行良好。 游戏使用一些 2D 渲染,一些 3D 渲染,在执行的不同阶段在两
我尝试用 EGL 初始化 GLES(因为我想从主线程中绘制而不是使用渲染器并从 onDrawFrame 内部绘图)。我收到错误消息:“确保 SurfaceView 或关联的 SurfaceHolder
我是一名优秀的程序员,十分优秀!