IOS下運用OpenGL 假如運用GLKit View 那麼不必擔憂屏幕旋轉的問題,闡明如下:
If you change the size, scale factor, or drawable properties of a GLKit view, it automatically deletes and re-creates the appropriate framebuffer objects and renderbuffers the next time its contents are drawn.
GLKit view 自動設置好了 framebuffer 和 renderbuffer 對象,運用者直接設置詳細的OpenGL 參數即可。但是GLKit view 在IOS10 下存在一些問題,不能運用,只能承繼最復雜的UIView,那麼一切相關的設置都需求自己完成。
所以也要自己處置屏幕旋轉的事情。假如參考Android的設計,處理思緒就是在屏幕旋轉的時分將一切的對象銷毀再依據以後的屏幕形態重新創立。復雜粗犷但是效率不行。我想不銷毀對象的狀況下,直接重新設置寬高數據讓OpenGL繪制出正確的圖像。於是我調用了如下的函數:
glViewport(0, 0, (GLsizei) (size.width * scale), (GLsizei) (size.height * scale)); _renderController->InitUniforms((int) (size.width * scale), (int) (size.height * scale));
首先設置viewport 然後第二行 InitUniforms
函數詳細做的事情就是重新設置投影矩陣。很遺憾,這樣的做法沒無效果,將屏幕從豎屏旋轉到橫屏時,失掉的後果如下:
上半局部什麼也沒有,下半局部歪曲嚴重。
問題出在 renderbuffer
Yes, the renderbuffer must be recreated when the interface is rotated, and set to the new size.
來源
所以還需求重新創立renderbuffer,
// first DELETE buffers glDeleteRenderbuffers(...); glDeleteFramebuffers(...); // recreate glGenFramebuffers(1, &_framebuffer); glGenRenderbuffers(1, &_renderbuffer); // bind buffer and set framebuffer and renderbuffer...
詳細代碼可以參考Recreating the render buffer causes a crash on 3GS device (OpenGL ES 1.1)
【OpenGL ES 呼應屏幕旋轉 iOS】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!