当我转动我的设备和我的应用程序临危APP_CMD_CONFIG_CHANGED
,我尝试用下面的更新我的OpenGL视:eglQuerySurface给出错误的大小
EGLint width;
EGLint height;
eglQuerySurface(display,surface,EGL_WIDTH,&width);
eglQuerySurface(display,surface,EGL_HEIGHT,&height);
glViewport(0,0,width,height);
MY_LOG_MACRO2("New window size: %d x %d",width,height);
这工作的时间约为20%。其他80%的时间宽度和高度是以前的值。换句话说,当我将设备转到横向模式时,大部分时间都会记录纵向大小。当我回到肖像时,横向尺寸被记录下来。
我从ANativeWindow
得到的尺寸也没有太大的好运。
我应该怎么做才能在旋转后获得正确的窗口大小?
更新:
通过APP_CMD_CONFIG_CHANGED
后等待几帧,大小总是正确的。在不考虑APP_CMD_CONFIG_CHANGED
的情况下查询每一帧的大小,并检查它是否发生了变化似乎也可以工作,但感觉不对。
你在哪里调用该代码? Opengl上下文是线程特定的。如果这段代码是在随机线程中运行的,那么只有在使用设置了上下文的线程时才可以工作 – crazyjul
@crazyjul我的应用程序只有一个线程。当ALooper_pollAll得到一个'APP_CMD_CONFIG_CHANGED'事件,然后我运行'pollSource-> process(appState,pollSource)''时,这个函数被调用。我的事件循环与示例代码几乎相同。 – IronMensan
来自Android论坛的帖子有相同的问题http://groups.google.com/group/android-ndk/browse_thread/thread/8fcfd0177eb78c26/9bfe07b81c36fdea?pli = 1 – crazyjul