我想在我的應用程序中實現一些基本的OpenGL,並且這樣做時,我使用SDK附帶的GLPaint示例作爲跳轉點。我的代碼自行運行良好,但是一旦我將所有內容移至我的應用程序,相同的代碼就會失敗。當我調整大小時,OpenGL繪圖搞砸了CAEAGLLayer
根據我的嘗試,問題是(1)基元在第一次繪製時出現壓扁,然後在隨後的基元被繪製時浮動到屏幕的頂部,或者(2)基元不出現在所有。
我縮小了範圍,這是因爲我的應用程序要求CAEAGLLayer進行調整。它位於UIScrollView中,可隨時移動和調整大小(捏,拖動等)。在GLPaint示例中,每當視圖調整大小(通過layoutSubviews)時,我都會丟棄幀緩衝區並重新創建它,工作。 (由於GLPaint例子從未調整大小,我懷疑示例代碼的這部分從未工作,因爲它從不需要)
只有當我將CAEAGLLayer設置爲1024 x 768的常量大小時,代碼將作爲預計:
self.layer.frame = CGRectMake(0, 0, 1024, 768);
有一次,我把上面一行:
self.layer.frame = self.bounds;
的問題返回。我的layoutSubviews方法的其餘部分是這樣的:
[EAGLContext setCurrentContext:context];
[self destroyFramebuffer];
[self createFramebuffer];
if (needsClearView) {
[self clearView];
needsClearView = NO;
}
的destroyFramebuffer和createFramebuffer方法大多來自GLPaint例子不變。引用視圖大小的唯一其他代碼是這些線路中的initWithCoder:
glOrthof(0, self.bounds.size.width, 0, self.bounds.size.height, -1, 1);
glViewport(0, 0, self.bounds.size.width, self.bounds.size.height);
我試圖在這裏改變價值觀,和其他地方的移動這些臺詞,但什麼我已經試過了工作。任何人對我有任何建議?
這是真實的(和一個錯誤)期間的iOS 4.3測試期間,但不再是真實的。 –
@quixoto:我正在測試的iOS 4(非beta版)iOS 4.3在過去的2個小時裏給我帶來了麻煩,直到我重新排列了所有東西以保持CAEAGLLayer的寬度和高度爲8的倍數。 – Anomie