2012-04-09 101 views
1

我在學習OpenGL,目的是爲Android/iPhone構建OpenGL ES應用程序。在普通OpenGL下學習OpenGL ES 2.0 - 編譯

因爲我從一開始就瞭解它,所以我寧願學習新的規範,而不接觸舊的東西(glBegin等)。不幸的是,當我通過一些教程和實現東西時,事實證明示例與ES 2.0不兼容。例如,在those excellent tutorials之後,我知道如何實現燈光,在我的電腦上有效,但不適用於手機(gl_LightSourcenot supported in the latter)。

我想怎麼辦,是發展我的電腦上的代碼,限制 API來被下的OpenGL ES支持的命令(例如,拋出錯誤的glLight)。那可能嗎?

+0

那麼你的意思是「在PC上開發而將API限制爲OpenGL ES」? – Kromster 2012-04-09 12:44:23

+0

@KromStern:是的,說得好 – 2012-04-09 13:40:16

回答

2

假設你正在使用Windows進行開發,那麼你可以限制API只是OpenGL ES 2.0的使用Google ANGLE。 ANGLE基本上是封裝DirectX,但是您可以通過完全符合標準的OpenGL ES 2.0界面來使用它。

如果您有AMD Radeon GPU,您還有另外的選擇:the AMD OpenGL ES SDK也提供完全兼容的2.0接口。

在這兩種情況下,如果您不小心使用了非OpenGL ES 2.0功能,則代碼在運行時不會編譯或失敗,以防參數組合不受支持。同樣的着色器,glCompileShader調用將失敗。

2

Mali GPU OpenGL ES Application Development Guide指出:

的OpenGL ES 1.1和OpenGL ES 2.0是完整的OpenGL的子集 標準。在使用OpenGL ES API時,您在開發應用程序時必須注意一些限制。

例如,下面的OpenGL功能不存在於任一 的OpenGL ES 1.1或OpenGL ES 2.0:

  1. 沒有爲在glBegin或glEnd沒有支撐。改爲使用頂點數組和頂點緩衝區對象。

  2. 唯一支持的柵格化圖元是點,線和三角形。 Quads不受支持。

  3. 沒有多項式函數評估階段。

  4. 無法將片段塊直接發送到單個片段操作。

  5. 不支持顯示列表。

此外,以下OpenGL功能不存在於 的OpenGL ES 2.0:

  1. 有用於固定功能圖形管線的支持。您必須使用您自己的頂點和片段着色器程序。

  2. 不支持查看變換,如glFrustumf。您必須計算您自己的變換矩陣,將其作爲統一變量傳遞給頂點着色器,並在着色器中執行 中的矩陣乘法。

  3. 不支持glVertexPointer和glNormalPointer等專業功能。改爲使用glVertexAttribPointer 。

你總是可以參考the OpenGL ES specification,看看是否被支持的功能/特性。

+0

感謝您列舉的差異。這就是要點 - 我想確保我不使用任何不支持的功能*沒有*手動引用規範 – 2012-04-09 14:22:48

+0

我不認爲有自動化的工具。但是你總是可以使用openGL es頭來編譯你的代碼。 – 2012-04-09 15:20:43

+0

因此,讓我直觀地看到,只要列出的功能都沒有被使用,相同的代碼在OpenGL和OpenGL ES上都可以使用? – dtech 2012-12-31 14:04:43

2

如果您想學習OpenGL ES 2並確保您只使用與OpenGL ES 2兼容的調用和技術,請考慮學習WebGL。您可以獲得javasript控制檯(使用firebug或chrome的內置開發人員工具)的優勢,並且在某些環境下(我認爲在Windows上使用chrome),您會收到非常有幫助的錯誤消息每當你做錯了什麼事。除此之外,您還可以自動訪問最多4個WebGL實現,以測試(firefox,chrome,safari,opera),並且您有一套相當不錯的測試OpengGL的工具。

這基本上是我怎麼一直能學習的OpenGL ES 2.