我對openGL相當陌生,我一直在嘗試一些關於我正在閱讀的iphone上的遊戲編程的示例代碼。 其中一個樣本是3D遊戲,我能夠在iOS模擬器(全屏)上成功編譯並運行它。iOS/openGL ES - 重寫drawRect似乎使openGL函數「glGetRenderbufferParameterivOES」行爲不當了?
我遇到的問題是當我在實際的硬件上運行它時(ipod touch 4G),遊戲沒有全屏顯示(它只佔用屏幕的1/4)。我能夠縮小問題降低到下面的代碼:
GLint backingWidth, backingHeight;
- (BOOL) bindLayer
{
....
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
....
}
出於某種原因,backingWidth和backingHeight被設置爲640和960以上(I預期它的調用後分別爲320×480,其是iphone的屏幕尺寸)。在iOS模擬器和較舊的iPod touch(2g)上,它工作得很好。
上面的代碼是UIView的子類的一部分,並覆蓋了drawRect方法(雖然它是空的)。讓我感到困惑的是當我刪除drawRect方法(因此不會覆蓋它)時,它以某種方式解決了我上面描述的問題。
任何人都可以對此有所瞭解嗎?在OpenGL中繪圖時覆蓋視圖的drawRect方法是否安全?爲什麼它在模擬器和較舊的iPod touch上工作?
太棒了。非常感謝!剛剛嘗試過,它工作! –