ユーザ用ツール

サイト用ツール


opengl:opengllist

文書の過去の版を表示しています。


OpenGL ES API

OpenGL ES 2.0

OpenGL 2.1 の Mobile 向け API。

Direct3D 9 世代の GPU をターゲットにしていますが、 固定機能パイプラインを廃して描画には Shader が必須となっています。 そのため OpenGL ES 1.1 や OpenGL 1.x 系とは全く互換性がありません。

Desktop API で固定機能互換性を切り捨てたのは OpenGL 3.x や Direct3D 10 なので、 Mobile では一足早く行われたことになります。

固定機能を削除したため、API は描画に必要な最小限で大変シンプルにまとまっています。 必要な機能があればシェーダーで実装すればよいわけで、重複した機能がなく合理的です。 歴代の 3D API の最も理解しやすいといえるかもしれません。

それ故移植性も高く、ブラウザの JavaScript から使える WebGL など、様々なプラットフォームで利用されています。 おそらく最も多くのプラットフォームで利用できる 3D API であるといえるでしょう。

OpenGL ES 2.0 が使えないプラットフォームを上げた方が早い。(Windows PC, Windows Phone くらいのもの)

入門にもおすすめ。

Direct3D 9 世代には ShaderModel 2.0 と 3.0 の 2種類あります。 OpenGL ES 2.0 対応 GPU は ShaderModel 3.0 から若干機能を削ったものに相当します。

  • Direct3D 8 ShaderModel 1.0
    • Pixel Shader は 9~12bit の固定小数点演算のみ。(lowp 未満)
    • Pixel Shader は Color Combiner を拡張しただけなので、プログラムサイズは 8~16 step + Texture 4~6 step 固定。
    • 使用できる Texture 枚数と Fetch 制限が同一。同じテクスチャを複数回読めない。
    • プログラム言語は基本的に Shader Assembler
  • Direct3D 9 ShaderModel 2.0
    • Pixel Shader は 24~32bit 浮動小数点演算をサポート
    • Pixel Shader の Program サイズは、Color 64 step + Texture 32 step の合計 96 step のみ
    • Texture Fetch 制限が分離 (同じテクスチャを複数読める) ただし上限あり
    • Fog など固定機能を併用する
    • 汎用補間 Register (varying) はなく Texcoord0~ を流用する。
  • Direct3D 9 ShaderModel 3.0
    • Pixel Shader は 32bit 浮動小数点演算をサポート
    • Program サイズは 512 step 以上
    • Pixel Shader の Color 命令と Texture 命令が統合された
    • Texture Fetch 制限がなくなった。同じテクスチャを何度でも読める。
    • 汎用補間 Register (varying) により用途はプログラマが決定する。
    • 動的分岐に対応
    • Shader Program は HLSL (高級言語) を使うことが当たり前となった
  • OpenGL ES 2.0 (ShaderModel 3.0-)
    • PixelShader は 16bit 浮動小数点演算以上をサポート
    • Shader Constant (Uniform) 数は Direct3D 9 3.0 の半分
    • Texture Fetch 制限なし
    • 24bit depth buffer はオプション
    • プログラム言語は GLSL (高級言語) のみサポート

ただし Mobile 向け GPU の多くにとって OpenGL ES 2.0 の最低要件は低すぎだったようで、 Extension により大きく機能拡張されているものがほとんどです。

OpenGL ES 3.0

opengl/opengllist.1397647671.txt.gz · 最終更新: 2014/04/16 20:27 by oga

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki