2011-05-03 218 views
8

從iPhone 3GS問世到現在已經有一段時間了,現在或許有足夠的OpenGL ES 2.0支持設備的市場份額,以保證它的發展。從OpenGL ES 1.1過渡到OpenGL ES 2.0

但是現在的情況是很多開發者可能已經有了巨大的代碼庫中的OpenGL ES 1.1

一個人怎麼transitionf ROM ES 1.1 ES 2.0?我想這些矩陣需要照顧,還有像GL_FOG,GL_CULL這樣的東西可能?

是否可以爲這些函數編寫「替代品」,例如您自己的glTranslatef,glPushmatrix等?這是否意味着性能受影響?

轉換到ES 2.0還有哪些其他考慮因素?使用這些優點和缺點(除了顯而易見的設備支持問題)之外還有什麼?

看看在標準es標籤在stackoverflow es 2.0標籤的數量,它看起來像它不是2.0的時間,但儘管如此。

回答

17

不要只是通過活動去堆棧溢出的標籤。首先,並非每個2.0或着色器相關的問題都被標記爲這樣。此外,很多關於OpenGL ES 1.1的信息都是在iPhone SDK發佈後不久發佈的,因此人們對該API更加熟悉。在OpenGL ES 2.0中,顯然有很多興趣,事實證明我的這個主題的課程是迄今爲止最受歡迎的my course videos

大多數情況下,處理幾何圖形的方式在1.1和2.0之間以及像幀緩衝區一樣,但其他所有內容都從內置函數確定到您自己的着色器。您將不得不編寫一些代碼來複制簡單的函數,例如使用模型視圖矩陣或紋理,但這些只需要着色器中的幾行。例如,使用模型視圖矩陣調整頂點是與將像這樣的線路在頂點着色器一樣簡單:

vec4 transformedPosition = modelViewProjMatrix * position; 

就個人而言,我取代了glRotate()等功能a long while ago using the Core Animation helper functions什麼有效地操作是一個模型視圖矩陣。這使得將代碼移到OpenGL ES 2.0中變得微不足道。

Jeff LaMarche在他的文章here中也有一個非常有用的幫助類,用於包裝大部分着色器程序設置代碼。

有關如何過渡到OpenGL ES 1.1的詳細指南,請參閱「從OpenGL ES 1.0遷移到OpenGL ES 2.0」一文,這是GPU Pro一書中的一章,可以在隨附的文檔中找到PowerVR SDK

我已經解釋了OpenGL ES 2.0在我以前的回答herehere中可以做些什麼,但也許這對於在新的API可以爲您提供什麼前後證明是有用的。

的OpenGL ES 1.1:

OpenGL ES 1.1

的OpenGL ES 2.0:

OpenGL ES 2.0

希望,你可以看到着色器替換一些內置功能的回報。

+0

您的觀點的優秀例證。你是製造分子應用程序的人嗎?我在圖片中假設這個例子,表演的收費大概是一樣的? – kamziro 2011-05-04 10:05:23

+0

@ kamziro - 是的,就是我。上面的屏幕截圖來自2.0版本,應該在本週末回顧。我並不是說你不會看到像我1.1例子那樣的簡單陰影幾何體和我的2.0例程序中生成的光滑球體之間的性能差異,只是你可以獲得更高級的效果。我的2.0渲染器比1.1的渲染器慢得多,但這是蘋果與桔子的比較,因爲後者更多。在1.1中獲取第二幅圖像所需的幾何圖形大小會削弱GPU。 – 2011-05-04 17:57:31

1

如果你有現有的項目,我不會推薦移動到2.0,考慮到所需的努力很可能超過它的價值。也就是說,對於任何新項目,我認爲沒有理由再考慮1.1了。大多數已銷售的設備都是3GS或4S,兩者都能夠處理2.0以上。

1

OpenGL ES 2.0有幾個與OpenGL ES 1.1常見的東西(在我的意思是渲染)。對於每個渲染,你需要着色器。例如,FOG也是用着色器創建的。但你會擁有更多的權力。

+1試圖確定是否要使用OpenGL ES 2.0的時候@jer他的回答