2009-08-07 67 views
6

在與一些同事的討論中,我們想知道爲Android或iPhone開發的OpenGL工作是否有效互換,因爲兩者都支持規範。或者,在兩個平臺之間共享OpenGL的現實更多的是一種怪癖,調整,並不像人們希望的那樣容易。Android和iPhone的OpenGL

回答

8

OpenGL實現通常由兩部分組成: 1.平臺特定的部分。這通常與創建和顯示曲面有關。 2. OpenGL API。在Android,OpenGLES 1.0的情況下,這個部分在OpenGL特定實現的所有平臺上都是相同的。

這意味着你的OpenGL代碼的大部分應該很容易移植。在C中,你可能有glLoadIdentity();
在Android上的Java,像gl.glLoadIdentity();

因此,對於大部分代碼,您可以剪切和粘貼,然後搜索並替換前綴,如「gl」。

現在有趣的部分:你真的需要小心你編碼的版本是什麼。桌面OpenGL具有OpenGLES中不存在的API。還有一些特定於每個平臺的OpenGL數據類型。另外,你有1.0(例如Android)1.1(例如iPhone)2.0(例如iPhone GS)來處理。 API的差異往往與額外的硬件功能有關,所以它不像你可以編寫一些簡單的包裝代碼來模擬1.0/1.1中的2.0特性。

+1

還應該補充一點,Android可以支持OGLES 1.1和2.0,具體取決於Andriod的版本。 – 2011-05-26 16:00:37

1

兩個平臺都使用OpenGL ES,但維基百科宣稱Android使用1.0,而iPhone使用1.1(原始版本和3G)2.0版本作爲3gs link。很可能至少有一些程序會使用不包含在1.0中的API函數,所以2(3)之間不會有完全的兼容性。

5

Android上的OpenGL ES根據Khronos Java GLES規範JSR239完成,並將GL調用包裝爲類似glinst.glBindBuffer(FloatBuffer.wrap(data)...) iPhone上的OpenGL ES使用庫存GL完成。 .h文件和相同的通話將只是看起來像glBindBuffer(數據...)

該代碼將是互換的,會造成許多怪癖,你甚至在進入的差異全亂1.0 1.1和2.0之間蜜蜂。