OpenGL ES

提供: MonoBook
ナビゲーションに移動 検索に移動

OpenGL ES(語源:OpenGL for Embedded Systems)とは、主に携帯電話などの組み込みシステムで使用されているコンピューターグラフィックス用のAPIである。

概要

OpenGL ESは大雑把にいえば無印OpenGLから機能を削ったものである。 OpenGL ESはオープン仕様かつロイヤリティフリーである。

互換性

OpenGL ESは無印OpenGL同様に「拡張」が許されているため互換性は絶望的な状況にある。無印OpenGLのようにNVIDIAAMDIntelの実質三社しか存在しない環境とは異なり、OpenGL ES製品は新興国の新興メーカーも次々と新製品を出しては消えており、その全てが挙動が違うという冗談顔だけにしてほしい状況となっている。

このためAndroid向けのゲームなどのアプリでは、世界で一番売れているSnapdragonシリーズに内蔵されるGPUAdrenoシリーズ」しかサポートしないという製品も多い。

AntutuPassmarkなどのベンチマークでSnapdragonシリーズを超える数値を叩き出したSoCは過去に幾度となく存在したが、OpenGL ESがクソ仕様なせいで実際にはゲームで遊べないという苦情が多発し、性能を抜きにしてSnapdragonシリーズを採用するという風潮が醸し出され、最終的にSnapdragon 810の爆死に繋がった。

バージョン

OpenGL ES 1.0

OpenGL ES 1.x系には1.0と1.1の2つが存在する。1.x系は処理が固定されたシェーダー(固定機能シェーダー)のみに対応しており、プログラム可能なシェーディング機能(プログラマブルシェーダー)には対応していない。このため、[フラットシェーディング]]あるいはグーローシェーディングといったカスタマイズ不可能な頂点単位のシェーディング(陰影計算)や質感表現のみがサポートされている。

OpenGL ES 1.0はOpenGL 1.3のサブセットとして2003年に登場した。Symbian OSAndroid プラットフォームの公式3DグラフィックスAPIとして採用されている。また、ソニー・コンピュータエンタテインメントによるOpenGL ES 1.0の拡張版「PSGL」がプレイステーション3の公式グラフィックスAPIの1つとしてサポートされている[1]

OpenGL ES 1.1

OpenGL ES 1.1はOpenGL 1.5のサブセットとして2004年8月9日に発表された。Android 1.6、iPhoneiPod touchiPad等で広くサポートされている。1.0世代のハードウェアでもデバイスドライバーのアップデートで1.1に対応可能とされる。

以下の機能がOpenGL ES 1.0に追加になっている。

  • バッファオブジェクト
  • 自動ミップマップ生成
  • 拡張テクスチャ処理
  • 頂点スキニング機能
  • ユーザー定義クリッププレーン
  • 拡張ポイントスプライト、ポイントスプライト配列
  • 静的・動的状態クエリー
  • テクスチャ描画
  • 新しいコア追加、プロファイル拡張

OpenGL ES 2.0

OpenGL ES 2.0はOpenGL 2.0のサブセットとして2007年に公開された。OpenGL 2.0およびDirectX 9相当。

iPhone 3GS以降、iPod Touchの第3世代以降、iPadAndroid 2.2以降などでサポートされている。2016年現在のiPhone 6sAndroid 6.0も基本はOpenGL ES 2.0である。現実問題としてAndroidでまともに動くのはこれしかない。ES3.0以降は対応機種が激減するためほとんど使用されていない。

OpenGL ES 2.0は、プログラマブルシェーダーに対応した初のバージョンであり、シェーディング言語「GLSL ES」に対応する。一方で固定機能シェーダーは削除されている。つまりOpenGL ES 2.0と1.x系はほぼ互換性はない。陰影計算・質感表現をプログラマブルシェーダーで記述することによってGPUによる支援が受けられるようになる。逆を言えばプログラマブルシェーダーで記述しなければGPU支援は受けられない。

シェーダーモデルでいえばSM 1.0 から SM 3.0 の世代である。

シェーディング言語は時代遅れ感が満載のGLSL ES 1.0をサポートする。プログラマブルシェーダーステージはバーテックスシェーダー頂点シェーダー)とフラグメントシェーダーピクセルシェーダー)の2つをサポートする。頂点単位やピクセル単位の陰影計算・質感表現の制御がGPUにより支援される。シェーダーは書き込みのみで読み出しはできないクソ仕様である。

なお、本家OpenGLはバージョン4.1でOpenGL ES 2.0プロファイルを扱うことができるようになっている。

OpenGL ES 3.0

OpenGL ES 3.0は2012年に発表された。2.0との後方互換性がある。

DirectX 10 (Direct3D 10) やOpenGL 3.2のジオメトリシェーダーはサポートされないが、マルチレンダーターゲット機能やマルチサンプルアンチエイリアスMSAA)を標準サポートするようになり、またUniform BlockTransform FeedbackなどのDirectX 10世代(統合型シェーダーアーキテクチャ世代)の機能を多数サポートする。なおサポートするだけで実際に使い物になるかは別問題である。

シェーディング言語はこれ考えた奴は実際に使うこと想定しているのか疑問なGLSL ES 3.0をサポートする。

なお、本家OpenGLはバージョン4.3でOpenGL ES 3.0プロファイルを扱うことができるようになっている。

OpenGL ES 3.1

OpenGL ES 3.1は2014年3月17日に発表された。

ジオメトリシェーダーおよびDirectX 11 (Direct3D 11) やOpenGL 4.0テッセレーションシェーダーはサポートされないが、本家OpenGL 4.3で採用されたコンピュートシェーダーなどを導入している[2]。3.0世代のハードウェアでもドライバーレベルのアップデートで3.1に対応可能とされる[3]

シェーディング言語はこれでコンピュートシェーダーを使えとか正気の沙汰とは思えないGLSL ES 3.1をサポートする。

なお、本家OpenGLはバージョン4.5でOpenGL ES 3.1プロファイルを扱うことができるようになっている。

OpenGL ES 3.2

OpenGL ES 3.2は2015年8月10日に発表された。

Google Android Extension Pack (AEP) にて拡張として定義されていた機能[4]、すなわちジオメトリシェーダーおよびテッセレーションシェーダー、そしてテクスチャ圧縮技術であるAdaptive Scalable Texture Compression (ASTC)のサポートが標準化されたほか、本家OpenGL 4シリーズ同等の機能が多数追加される[5]

シェーディング言語はGLSL ES 3.2をサポートする。

関連項目

参考文献