2011-09-05 89 views
3

當設備方向更改時,我的OpenGLES視圖出現問題。我正在使用Jeff Lamarche's Xcode template在OpenGLES中處理iPhone方向變化

如果設置了AutoresizeMask,則在GLView上調用- (void)layoutSubviews。發生這種情況時,我正在繪製的對象消失。 OpenGL視圖仍然部分工作,因爲我可以更改背景顏色並查看更改。

如果AutoresizeMask而不是集合,視圖旋轉和OpenGL對象仍然可見,但然後視圖是錯誤的大小。

這表明layoutSubviews中有東西在多次調用時會導致問題。

下面是drawView一些非常基本的代碼顯示問題

- (void)drawView:(UIView *)theView 
{  
    Vertex3D vertex1 = Vertex3DMake(0.0, 1.0, -3.0); 
    Vertex3D vertex2 = Vertex3DMake(1.0, 0.0, -3.0); 
    Vertex3D vertex3 = Vertex3DMake(-1.0, 0.0, -3.0); 
    Triangle3D triangle = Triangle3DMake(vertex1, vertex2, vertex3); 

    glLoadIdentity(); 
    glClearColor(0.7, 0.7, 0.7, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glColor4f(1.0, 0.0, 0.0, 1.0); 
    glVertexPointer(3, GL_FLOAT, 0, &triangle); 
    glDrawArrays(GL_TRIANGLES, 0, 3); 
    glDisableClientState(GL_VERTEX_ARRAY); 
} 

當設備使用此代碼在屏幕上的三角形消失旋轉。重新定位回肖像並不會使其重新出現。

我應該不允許GLView的重新定位,還是這是我的OpenGL代碼中的錯誤?

回答

1

糾正我,如果我錯了,但我相信在layoutSubviews您需要刪除並重新創建您的幀緩衝區以匹配新的大小。如果你去here(我推測你已經加入了Apple開發者計劃),並且看看視頻「iOS 5上OpenGL的最佳實踐」,那麼這個演講者會談論旋轉,以前建議用OpenGL手動去做,因爲性能問題,但接着說現在它可以通過使用內置旋轉來輕鬆處理。演講者還提到,如果您使用的是GLKView,它將代表您調整幀緩衝區大小。

此外,我不確定您的意思是「很多開發人員都遇到了問題」。 Google和Stack Overflow中的一些粗略搜索沒有向我透露任何其他人有這個問題;我懷疑你的代碼可能有問題。

我也跟着你的鏈接到Jeff Learche的Xcode Template和Xcode 4模板的鏈接被打破 - 這可能是因爲它來自2011年5月。也許只是看看GLK框架,如果你的OpenGL需求不是太專業?