2010年8月24日 星期二

[C++ 程式設計]嵌入式系統繪圖函式庫, OpenGL ES !!

有設計過 3D 圖形程式的人應該都接觸過 OpenGL (或是DirectX)。而使用過 OpenGL 開發應用程式一定常感到困擾,因為它還是屬於序列式( procedural library)的函式庫,這意味著若我們要使用某些特定功能時,可能同時要透過數個函式並熟知其複雜的相依性,這容易造成程式錯誤又難以分析問題。另外 OpenGL 另一個令人頭痛的問題,就是規格會依不同廠商而產生差異性,除了使用上有許多條件與限制之外,函式與參數的名稱有時變得十分冗長又不直覺。




在 2000 、 2010 年後的今天,行動設備已成為最普遍、與生活息息相關的科技產物,因此行動裝置上的應用越來越多元化。早期手機的需求或許只要文字的傳遞,但現在已有大幅度的改變,圖形取代了文字,3D 取代了 2D 。隨時代演進下的新產物,就是今天要介紹的 OpenGL 衍生系統,稱之為 OpenGL ES 。

OpenGL ES 的設計考量了舊式 OpenGL 的一些嚴重缺陷,雖然仍採用序列式的方法制定介面(我想這應該是受限於 C 語言的支援)。函式庫包含了 OpenGL ES 1.X 與 OpenGL ES 2.X 兩系列,這樣的分歧是具有重大意義的,因為行動裝置性能上的差異越來越大,因此不同需求廠商可選擇不同品質與複雜度的介面來開發。OpenGL 1.X 採用原 fixed pipeline 的架構而 OpenGL 2.X 僅支援 programmable pipeline ,這大幅度的簡化 OpenGL 龍蛇混雜的繪圖介面,更明確的定義應用程式的目標。另外不在支援特定廠商所提出來的新規格,可在參數或函式上加入特殊名稱,一切函式定義都需精簡;考量行動裝置在電力上的吃緊,在許多功能上也開放了低功的設定,讓品質與效能達到更良好的平衡。

2 則留言:

  1. 個人使用經驗上我覺得不是object oriented的API其實影響不大,如果需要我自己可以包裝成object oriented。extensions倒是真的很麻煩,不像DirectX 10,我只要拿到device,他的spec就已經寫明白硬體需要支援的最低限制了,也就是硬體必須符合軟體規範,而不是像OpenGL是反過來的,軟體必須支援各種不同能力的硬體。OpenGL ES應該是大幅改進了這種情況,OpenGL在3.0之後,其實也有提供精簡版的header gl3.h,只是實際使用上常常還是需要考慮過去的沉重包袱...程式員的工作就是在處理這些骯髒的細節吧...

    回覆刪除
  2. 衷肯...程式員還是要早點對骯髒的事情有所覺悟(雖然不是絕對)。若轉不過來就容易爆炸,傷人害己,哈哈。

    回覆刪除