當我轉動我的設備和我的應用程序臨危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