我將我的遊戲移植到android,並決定使用NativeActivity而不是Java活動和JNI調用(我不避開JNI,只是設置回調會更方便並且opengl上下文創建/破壞純粹在c/C++中)。保留通過本地代碼創建的egl上下文
我知道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調用的窗簾後面實例化的嗎?
感謝您解決問題!我將手動管理我的上下文,然後根據設備功能銷燬或保留它。 – 2014-09-19 18:10:36