最近在寫 iPhone 上的 OpenGL 程式,不過雖然 Xcode 中就有提供 OpenGL 的樣版,但是因為對 OpenGL 不熟,看得不是很懂。
雖然後來自己改了裡面的程式碼,也畫出了東西,但是在 Simulator 中執行時整個就是怪,首先是顏色全部跑掉了,一般設定顏色的順序是 RGBA,但是在 Simulator 中顏色的順序居然變成了 GRAB,所以畫出來的顏色整個就是怪。
這感覺就很像是 byte-order 採用 little-endien 和 big-endien 所造成的問題,後來 Google 了一下,果然也有人遇到一模一樣的問題,據他所說,其他的 CocoaTouch 部份都可以正常運作,就只有 OpenGL 的部份會出錯。
我想這個出錯的原因應該是因為 OpenGL ES 裡面不能用 glBegin()/glEnd(),然後個別指定 vertex 資訊的這種用法,必須把 vertex 和 normal、color 等資料存成陣列,用 glDrawArray()/glDrawElement() 的方式一次丟給顯示晶片處理,而應該是 simulator 把陣列丟給顯示晶片時造成的 byte-order 問題。目前確定顏色會出問題,不知道 normal 和 vertex 陣列會不會也跟著出問題…
而 iPhone SDK on PPC 是不被官方所支援的平台,我看這個 bug 的修復應該是遙遙無期了…