eglQuerySurface给出错误的大小

Iro*_*san 5 opengl-es android-ndk

当我旋转设备并收到我的应用程序时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);
Run Code Online (Sandbox Code Playgroud)

这大约占20%的时间.另外80%的时间宽度和高度是先前的值.换句话说,大多数情况下,当我将设备转为横向模式时,会记录纵向尺寸.当我回到肖像时,会记录景观大小.

ANativeWindow两者中获得尺寸我都没有太多运气.

旋转后,我应该怎么做才能获得正确的窗口尺寸?

更新:

通过等待几帧后APP_CMD_CONFIG_CHANGED,大小始终是正确的.每帧都查询大小而不考虑APP_CMD_CONFIG_CHANGED,并检查它是否已经改变似乎也能正常工作但感觉不对.

Kry*_*gaj 0

它可能不起作用,因为例如在创建上下文时可能会设置表面大小,并且您查询“先前”大小(创建上下文时)。 编辑:我已经在 SGS2(2.3.5) 上对其进行了测试,并且立即得到了正确的结果,因此这可能是设备“供应商”问题(或 Android 版本问题)。

Edit2:看来我在测试时犯了一些错误,作为@IronMensan,我也得到了奇怪的结果。有时它可以正常工作,但大多数情况下不能。对不起,我错了。因此,我将继续按照我最初的回答(如下)中的方式重新创建 EGL 上下文。

当我得到 APP_CMD_CONFIG_CHANGED 时,我只是简单地销毁并重新创建 EGL 上下文(使用着色器、纹理等),与我得到 APP_CMD_TERM_WINDOW -> APP_CMD_INIT_WINDOW 时类似。