【发布时间】:2014-11-14 03:44:16
【问题描述】:
我正在将我的游戏移植到 android 并决定使用 NativeActivity 而不是 Java 活动和 JNI 调用(我并没有避免 JNI,尽管纯粹在 c 中设置回调和 opengl 上下文创建/销毁会更方便/c++)。
我知道 GLSurfaceView 有一个 setPreserveEGLContextOnPause 函数,但那是在 Java 中,而不是在本机应用程序中。我使用以下代码创建上下文:
EGLConfig config;
EGLSurface surface;
EGLContext context;
EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display, 0, 0);
eglChooseConfig(display, attribs, &config, 1, &numConfigs);
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
ANativeWindow_setBuffersGeometry(engine->app->window, 0, 0, format);
surface = eglCreateWindowSurface(display, config, engine->app->window, NULL);
const EGLint contextAttribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 2,
EGL_NONE
};
context = eglCreateContext(display, config, NULL, contextAttribs);
if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) {
ERR("Unable to eglMakeCurrent");
return -1;
}
我也知道 setPreserveEGLContextOnPause 不是 100% 可靠的,我应该检查东西是否被手动销毁,但如果不是 - 我想跳过资产重新加载部分以加快加载速度。
基本上我想做的是使用 setPreserveEGLContextOnPause (或者它相当于 ndk 世界)。可能吗? GLSurfaceView 是否在 android 的 egl 调用背后被实例化?
【问题讨论】:
标签: android c++ android-ndk java-native-interface opengl-es-2.0