【发布时间】:2011-11-28 01:42:07
【问题描述】:
当我旋转我的设备并且我的应用收到 APP_CMD_CONFIG_CHANGED 时,我尝试使用以下内容更新我的 OpenGL 视口:
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 我的应用程序只有一个线程。当 ALooper_pollAll 获得
APP_CMD_CONFIG_CHANGED事件然后我运行pollSource->process(appState,pollSource)时,将调用此函数。我的事件循环与示例代码几乎相同。 -
来自 Android 论坛的帖子有同样的问题 groups.google.com/group/android-ndk/browse_thread/thread/…
标签: opengl-es android-ndk