OpenGL ES について

OpenGL/OpenGL ES Extension Registry 内の検索:
[検索方法]
OpenGL 拡張 OpenGL ES 拡張 EGL 拡張

■OpenGL ES とは?

OpenGL ES (OpenGL for Embedded Systems) とは、組み込み用途向け OpenGL のサブセット版です。
Khronos Groupが仕様策定を行っています。
OpenGL ES は、OpenGL を携帯電話、PDA(携帯情報端末)、家電などに組み込まれる表示システムでの利用をターゲットに、必要十分な機能に絞り込んでよりコンパクトな規格にまとめたものです。

(NTTドコモ、AU(KDDI)、ソフトバンクの携帯電話、Android、iPhone/iPad や PLAYSTATION3 といった身近な機器でも利用されるようになっています。)

車載用や航空電子用のディスプレイといった用途には、OpenGL SC という安全の重要なプロファイルがあります。

■OpenGL ES 2.x と 1.x の違い

OpenGL ES は、3D グラフィックスパイプラインに固定機能パイプラインである 1.x と プログラマブルシェーダの 2.x の2系統に大きく分けられます。

OpenGL ES のバージョン特徴3Dグラフィックスパイプライン
OpenGL ES 1.X OpenGL ES 1.0 主にソフトウェア実装を想定 固定機能パイプライン
OpenGL ES 1.1 ハードウェア実装を想定
OpenGL ES 1.1 + Extension Pack ES 1.1 の拡張機能パック
OpenGL ES 2.X OpenGL ES 2.0 プログラマブルシェーダのみの実装


OpenGL ES 2.x では固定機能パイプラインが廃止されたため、1.x の上位互換ではありません。


  • OpenGL ES と対応する OpenGL のバージョン

    OpenGL ES のバージョンは次の表で示したように、OpenGL の次のバージョンに対応します。


    OpenGL ES のバージョン対応するOpenGLのバージョン
    OpenGL ES 1.0OpenGL 1.3
    OpenGL ES 1.1OpenGL 1.5
    OpenGL ES 2.0OpenGL 2.0

    OpenGL SC のバージョンは次の表で示したように、OpenGL ES/OpenGL の次のバージョンに対応します。


    OpenGL SC のバージョン対応するOpenGL ES のバージョン対応するOpenGLのバージョン
    OpenGL SC 1.0OpenGL ES 1.0OpenGL 1.3

    OpenGL/OpenGL ES のバージョンは次の表で示したように、OpenGL Shading Language のバージョンに対応します。


    OpenGL/OpenGL ESのバージョン GLSL/GLSL ESのバージョン
    OpenGL 3.0 GLSL 1.30 以降
    OpenGL 2.1 GLSL 1.20 以降
    OpenGL 2.0 GLSL 1.10 以降
    OpenGL 1.5 拡張機能で GLSL 1.00 以降
    OpenGL ES 2.0 GLSL ES 1.00

  • OpenGL ES 2.0

    プロファイル
    Common-Lite プロファイルの削除

    OpenGL Shading Language
    シェーダAPIの追加
    GLSL ES 1.00 をサポート

    マルチサンプリング
    マルチサンプリングバッファ選択時は常に有効

    固定機能パイプライン処理の削除
    頂点属性の削除(例: glVertexPointer, glNormalPointer, 他。glVertexAttribPointer で代用)
    マトリックス処理の削除
    ライティング処理の削除
    フォグ処理の削除

    テクスチャマッピング
    glTexEnvの削除
    CUBEMAPテクスチャのサポート

    ユーザークリップ
    ユーザークリップの削除

    アルファテスト
    アルファテストの削除

    ロジックオペレーション
    ロジックオペレーションの削除

    ポイントスプライト
    ポイントスプライトは仕様変更

    フレームバッファオブジェクト(FBO)
    フレームバッファオブジェクトのサポート

    拡張機能
    Extension Name仕様書 1.06仕様書 1.19最新版
    GL_OES_read_format必須コアコア
    GL_OES_compressed_paletted_texture必須必須?オプション
    GL_OES_framebuffer_object必須コアコア
    GL_OES_stencil8必須コアコア
    GL_OES_fbo_render_mipmapオプションオプションオプション
    GL_OES_rgb8_rgba8オプションオプションオプション
    GL_OES_depth24オプションオプションオプション
    GL_OES_depth32オプションオプションオプション
    GL_OES_stencil1オプションオプションオプション
    GL_OES_stencil4オプションオプションオプション
    GL_OES_vertex_half_floatオプションオプションオプション
    GL_OES_texture_floatオプションオプションオプション
    GL_OES_texture_float_linearオプションオプションオプション
    GL_OES_element_index_uintオプションオプションオプション
    GL_OES_mapbufferオプションオプションオプション
    GL_OES_texture_3Dオプションオプションオプション
    GL_OES_texture_npotオプションオプションオプション
    GL_OES_fragment_precision_highオプションオプションオプション
    GL_OES_compressed_ETC1_RGB8_textureオプションオプションオプション
    GL_OES_shader_sourceオプション*1コア*2コア
    GL_OES_shader_binaryオプション*1コア*2コア

    *1 GL_OES_shader_source, GL_OES_shader_binary のどちらか一方をサポート

    *2 OpenGL ES 2.0 仕様書 Version 1.19 では、GL_OES_shader_shource, GL_OES_shader_binary がコアに組み込まれました。
    GL_SHADER_COMPILER が GL_TRUE の場合、ソースシェーダの読み込み/コンパイルが可能です。
    また、GL_NUM_SHADER_BINARY_FORMATS が 1 以上の場合、 GL_SHADER_BINARY_FORMATS に対応フォーマットが示され、 対応するコンパイル済みバイナリシェーダの読み込みが可能です。
  • OpenGL ES 1.1 Extension Pack

    OpenGL ES 用拡張機能をまとめたものです。


    拡張機能
    Extension Nameオプション
    GL_OES_texture_env_crossbarES 1.2 *
    GL_OES_textured_mirrored_repeatES 1.2 *
    GL_OES_texture_cube_mapES 1.2 *
    GL_OES_blend_subtractES 1.2 *
    GL_OES_blend_func_separateES 1.2 *
    GL_OES_blend_equation_separateES 1.2 *
    GL_OES_stencil_wrapES 1.2 *
    GL_OES_extended_matrix_paletteES 1.2 *
    GL_OES_framebuffer_objectES 1.2 *
    GL_OES_rgb8_rgba8オプション
    GL_OES_depth24オプション
    GL_OES_depth32オプション
    GL_OES_stencil1オプション
    GL_OES_stencil4オプション
    GL_OES_stencil8オプション

    * OpenGL ES 1.2 では必須の拡張機能となる予定
  • OpenGL ES 1.1

    OpenGL ES 1.0 で削除された機能の一部をサポート
    ユーザークリップを少なくとも1面サポート


    拡張機能
    Extension NameCommonCommon-Lite
    GL_OES_byte_coordinatesコアコア
    GL_OES_fixed_pointコアコア
    GL_OES_single_precisionコアn/a
    GL_OES_matrix_getコアコア
    GL_OES_read_format必須必須
    GL_OES_compressed_paletted_texture必須必須
    GL_OES_point_size_array必須必須
    GL_OES_point_sprite必須必須
    GL_OES_matrix_paletteオプションオプション
    GL_OES_draw_textureオプションオプション
    GL_OES_query_matrixオプションオプション
  • OpenGL ES 1.0



    拡張機能
    Extension NameCommonCommon-Lite
    GL_OES_byte_coordinatesコアコア
    GL_OES_fixed_pointコアコア
    GL_OES_single_precisionコアn/a
    GL_OES_read_format必須必須
    GL_OES_compressed_paletted_texture必須必須
    GL_OES_query_matrixオプションオプション
  • OpenGL SC 1.0

    OpenGL ES 1.0 の仕様に基づき、いくつかの変更が行われています。

    基本型は float, int, unsigned byte のみ

    OpenGL ES 1.0 で削除された機能を追加
    glBegin/glEnd パラダイムをサポート
    ディスプレイリストをサポート
    glDrawPixelsとglBitmapをサポート
    線アンチエイリアシングをサポート

    OpenGL ES 1.0 から削除された機能
    テクスチャマトリックス
    圧縮テクスチャ
    マルチサンプリング
    コピーテクスチャイメージ
    フォグ
    ディザ

    制限された機能
    テクスチャマッピング
    アルファfunc
    ブレンドfunc
    デプスfunc


    拡張機能
    Extension Name備考
    GL_OES_single_precisionコア
    GL_EXT_paletted_textureオプション
    GL_EXT_shared_texture_paletteオプション

  • OpenGL ES 2.0 と OpenGL 2.0 の比較


  • OpenGL ES 1.1 と OpenGL 1.5 の比較


  • OpenGL ES 1.0 と OpenGL 1.3 の比較

    OpenGL ES が OpenGL のサブセットであることは既に示してあります。ここでは OpenGL ES 1.0 が、OpenGL 1.3 の機能のうち、どの機能が削られているのかを簡単に表で示します。


    また、OpenGL と違い OpenGL ES では、GLU ライブラリに相当するユーティリティ・ライブラリや、GLUT のようなユーティリティ・ツールキットは用意されていません。 (現在では、一部のプラットフォームに限られますが、OpenGL ES 用の GLUT が用意されています。)


    機能OpenGL 1.3OpenGL ES 1.0
    プリミティブPOINTS,LINES,LINE STRIP,
    LINE LOOP,TRIANGLES,
    TRIANGLE STRIP,TRIANGE
    QUADS,QUADS STRIP
    POLYGON
    POINTS,LINES,LINE STRIP,
    LINE LOOP,TRIANGLES,
    TRIANGLE STRIP,TRIANGE
    頂点配列
    頂点配列でのみ描画可能
    Rectangles×
    テクスチャマッピング1D,2D,3D,CUBE2Dのみ
    マルチテクスチャマッピング
    テクスチャ座標自動生成×
    フォグ
    混合処理
    クリップユーザ追加クリップは×
    ポリゴンモード×
    ビットマップ×
    デプステスト、ステンシルテスト、
    アルファテスト
    シザーテスト
    セレクション、フィードバック×
    ディスプレイリスト×
    エバリュエータとNURBS×
    カラーモードRGBA,INDEXRGBAのみ
    バッファCOLOR,DEPTH,STENCIL,ACCUMCOLOR,DEPTH,STENCIL
    MATRIX STACK最小32最小16


    注意) ここで示したものが全てではありません。また、○の箇所でも制限が加わっている場合があります。

  • EGL

    OpenGL ES を利用するために、ネイティブ・プラットフォーム・グラフィックス・インターフェイスの EGL が用意されています。


    これは X 環境での glXxxx() 関数群(GLX)や Windows 環境の wglxxx() 関数群(WGL)、Macintosh 環境の aglxxx() 関数群(AGL)、OS/2 環境の pglxxx() 関数群(PGL) に相当するものです。


    EGL 1.2 以降では、OpenGL ES に加えて OpenVG にも対応しています。


    バージョン特徴
    EGL 1.0 初期バージョン
    EGL 1.1 render_texture 拡張機能、PowerManagement、スワップコントロール対応
    EGL 1.1.2 頂点バッファオブジェクトがレンダリングコンテキスト間で共有
    EGL 1.2 OpenVG からの利用が可能
    EGL 1.3
    • OpenGL ES 2.X, 1.X のコンテキストに対応


    • eglCrateContext に EGL_CONTEXT_CLIENT_VERSION を追加


    • EGL_RENDERABLE_TYPE に EGL_OPENGL_ES2_BIT を追加


    • eglChooseConfig に EGL_MATCH_NATIVE_PIXMAP を追加


    • EGLConfig に EGL_VG_COLORSPACE_LINEAR_BIT, EGL_VG_ALPHA_FORMAT_PRE_BIT を追加(OpenVGより)


    • トークンの変更(旧トークンも使用可能)

    EGL 1.2 トークン名EGL 1.3 トークン名
    EGL_COLORSPACEEGL_VG_COLORSPACE
    EGL_COLORSPACE_LINEAREGL_VG_COLORSPACE_LINEAR
    EGL_COLORSPACE_sRGBEGL_VG_COLORSPACE_sRGB
    EGL_ALPHA_FORMATEGL_VG_ALPHA_FORMAT
    EGL_ALPHA_FORMAT_PREEGL_VG_ALPHA_FORMAT_PRE
    EGL_ALPHA_FORMAT_NONPREEGL_VG_ALPHA_FORMAT_NONPRE
    NativeDisplayTypeEGLNativeDisplayType
    NativePixmapTypeEGLNativePixmapType
    NativeWindowTypeEGLNativeWindowType
    EGL 1.4
    • OpenVG のためのマルチサンプルバッファに対応


    • eglSurfaceAttrib で EGL_MULTISAMPLE_RESOLVE をサポート
      フィルタに EGL_MULTISAMPLE_RESOLVE_BOX の指定が可能


    • eglSurfaceAttrib で EGL_SWAP_BEHAVIOR をサポート
      スワップバッファの際、バックバッファの内容が保持(EGL_BUFFER_PRESERVED)か、 破壊(EGL_BUFFER_DESTROYED)かの指定が可能


    • クライアントAPIとして、OpenGL(OpenGL ES に加えて、あるいは OpenGL ES の代わりに)のサポートが可能


    • EGLNativeDisplayType に X と Windows のデータ構造のマッピングを許容

■OpenGL ES エミュレータ

AMD OpenGL ES 2.0 Emulator v1.4

AMD(旧ATI) の Windows 上で動作する OpenGL ES 2.0 のエミュレータです。
エミュレータといっても下記に示す携帯端末エミュレータとは異なり、 Visual C++ 2005 向けのライブラリという形で提供されています。
このため、Windows 上で OpenGL でプログラムを作成するのと同じ感覚で、 OpenGL ES のプログラムを作成することができます。
(Windows 向けの OpenGL ES ライブラリが、OpenGL を使って作られており、OpenGL ES のエミュレーションを行っているという意味)

OpenGL 4.1 の仕様からは OpenGL ES 2.0 をサポートするためか、OpenGL ES エミュレータは「This program has been discontinued.」となってしまいましたが、 AMD の Web サイトから(メールアドレスの登録が必要ですが無償)ダウンロードが可能です。


  • Windows XP または Windows Vista をサポート
  • いくつかの OpenGL ES 2.0 拡張機能をサポート
  • EGL 1.3 をサポート
  • ATI Radeon X1300 以上推奨。(最低動作環境は ATI Radeon 9500)
    ATI のグラフィックスチップ以外でも動作(ただし、未確認)
    OpenGL 2.0 以上のハードウェアが必要。
  • エミュレータもバイナリシェーダをサポート。
  • エミュレータ用バイナリシェーダコンパイラ MakeBinaryShader.exe が付属。

AMD OpenGL ES 2.0 Emulator

BREW

BREW 2.1 からは OpenGL ES を Extension でサポートしています。

BREW は QUALCOMMが開発した携帯電話向けのアプリケーション実行環境です。 日本では au(KDDI) の携帯電話が EZアプリ(BREW) を使用しています。

BREW アプリケーションは、Windows 上で開発が可能となっています。 SDK には Windows で動く BREW シミュレータも含まれており、 実機がなくても開発ができるようになっています。

また、OpenGL ES Extension も BREW シミュレータで利用可能となっており、 Windows 上で OpenGL ES を用いた BREW アプリケーションを作成することもできます。

  • BREW SDK 3.1.5 SP01 英語 以上 + BREW SDK OpenGL ES 1.0 Extension for Convergence platform 1.1.3

    • ATI Radeon 9800 以降のグラフィックスカードにのみ対応しています。
    • nVidia のグラフィックスカードには対応していません。
    • OpenGL ES 1.0 Common と Common-Lite Profile
    • Covergence Platform: MSM7200, MSM7500, MSM7600



  • BREW SDK 3.1.2.13 日本語(rev2) + BREW SDK OpenGL ES 1.0 Extension for Enhanced platform 1.0.3

    BREW SDK + OpenGL ES
    • OpenGL ES 1.0 Common-Lite Profile
    • Enhanced Platform: MSM6275, MSM6550, MSM6800


詳しくは BREW で OpenGL ES をご覧ください。

iアプリ(DoJa)

DoJa-5.0 プロファイルから OpenGL ES をオプションでサポートしています。

DoJa は、NTTドコモの携帯電話に搭載されている Java 実行環境です。

iアプリは、Windows 上で開発が可能となっています。 SDK には Windows で動くエミュレータも含まれており、実機がなくても開発ができるようになっています。

また、OpenGL ES もエミュレータで利用可能となっており、Windows 上で OpenGL ES を用いた iアプリを作成することもできます。

ただし、OpenGL ES 機能を用いたiアプリはトラステッドアプリ(iアプリDX)となりますので、 ご注意ください。

  • DoJa-5.0, DoJa-5.0LE + iappli Development Kit for DoJa-5.0

    • DoJa 5.0仕様は、FOMA 903i, 904iシリーズ(703i, 704i, 705iシリーズを含む)に搭載。
    • DoJa 5.0LE仕様は、FOMA 703i, 704i, 705iシリーズに搭載。

    • パッケージ com.nttdocomo.ui.ogl

      固定小数点処理を除いた OpenGL ES 1.0 Common プロファイルに相当する機能を提供する Java パッケージ

    • パッケージ com.nttdocomo.ui.ogl.math

      ハードウェアを使用した数値演算機能を提供する Java パッケージ


    DoJa SDK + OpenGL ES
  • DoJa-5.1, DoJa-5.1LE + iappli Development Kit for DoJa-5.1

    • DoJa 5.1仕様は、FOMA 905i, 906iシリーズ(705iシリーズを含む)に搭載。
    • DoJa 5.1LE仕様は、FOMA 705i, 706iシリーズ(884iを含む)に搭載。

    • パッケージ com.nttdocomo.ui.ogl

      固定小数点処理を除いた OpenGL ES 1.1 Common プロファイルに相当する機能を提供する Java パッケージ

    • パッケージ com.nttdocomo.ui.ogl インターフェイス GraphicsOGL2

      OpenGL ES 1.1 拡張機能に相当するオプションAPI(GL_OES_texture_cube_map に対応)
      P905i, P705i, P705iμ で利用可能
      これについては、Windows 上で動くエミュレータでは対応していない。

    • パッケージ com.nttdocomo.ui.ogl.math

      ハードウェアを使用した数値演算機能を提供する Java パッケージ



■OpenGL ES 関係書籍

OpenGL ESによる3Dグラフィックスプログラミング入門 ― 固定機能パイプライン

OpenGL ES 1.1 のプログラミングの入門書。

プリミティブの描画、ライティング、テクスチャマッピング等の基礎から、 ポイントスプライト、マトリックスパレット、DOT3バンプマッピング、ステンシルシャドウ等の内容を含みます。 サンプルプログラムは各章で紹介する内容に絞り込み極力簡素化することで、 本質的な部分を理解しやすいようにしています。

より広く OpenGL ES 1.1 の学習ができるように Windows で動くサンプルプログラムを用いていますが、 OpenGL ES 自体はプラットフォームに依存しませんので、プラットフォーム依存部のみ移植することで 他のプラットフォームでも動かすことができます。(一部の拡張機能を用いたサンプルを除く)

CD-ROM には、本書の Windows 用のサンプルプログラムと、OpenGL ES 1.1 を Windows から利用できるようにした OpenGL ES 1.1 エミュレータが含まれます。
サンプルプログラムのソースコードはCD-ROMの他、本書の中にも含まれており、 パソコンを開かなくてもサンプルプログラムの中身を確認することができます。

http://www.cutt.co.jp/book/978-4-87783-265-0.html



OpenGL ES2.0のためのGLSL/GLSL ESプログラミング入門
―プログラマブルシェーダと3Dグラフィックスの理論・応用

OpenGL ES 2.0 のためのシェーダプログラミング入門書。

OpenGL 2.0 の GLSL 1.10 を用いてシェーダの基礎をサンプルプログラムを用いて解説しています。 OpenGL ES 2.0 のシェーダ言語である GLSL ES 1.00 は、GLSL 1.10 のサブセットであり、 GLSL ES 1.00 を理解するのに、GLSL 1.10 から理解した方が敷居が低いのです。 これは GLSL 1.10 がサポートしている便利な機能が、GLSL ES 1.00 では削られているため、 GLSL ES 1.00 で簡単なシェーダを作るのにも多くの知識が必要となるためです。 その後に GLSL ES 1.00 と GLSL 1.10 の違いを紹介しています。

CD-ROM には、本書の Windows 用の GLSL 1.10/GLSL ES 1.00 のサンプルプログラムが含まれます。
サンプルプログラムのソースコードはCD-ROMの他、本書の中にも含まれており、 パソコンを開かなくてもサンプルプログラムの中身を確認することができます。

http://www.cutt.co.jp/book/978-4-87783-266-7.html



OpenGL ES ゲーム開発技法

OpenGL ES Game Development の訳本。
原書は OpenGL ES 1.1 を基に記述されていますが、 OpenGL ES 2.0 の概要等加筆されています。
OpenGL と OpenGL ES 1.0 とを比較しながら、機能の違いを紹介しています。
また、OpenGL ES 1.1 で拡張された機能についても同様に紹介しています。



OpenGL ES 2.0 Programming Guide (日本語版)

OpenGL ES 2.0 のプログラミングガイド
OpenGL ES 2.0 プログラマー必須の書籍。
OpenGL ES 2.0 はシェーダが中心であることから、プログラミングガイドも OpenGL のものとは異なり、 GLSL ES 1.00 の解説が中心となっています。

AMD(旧ATI)の OpenGL ES 2.0 エミュレータで動作可能なサンプルも豊富。
サンプルコードは下記から入手が可能です。
http://www.opengles-book.com/

このサンプルは、OpenGL ES 2.0 で削除されたマトリックス処理関数の一部、 GLUT や AUX ライブラリ、GLU ライブラリの中から必要最小限の機能を OpenGL ES 向けにデザインし直した ユニークな ES Framework API が使われています。

日本語版は、付録に iPhone 3GS(OpenGL ES 2.0), Android(OpenGL ES 1.0) 向けの説明が追加されています。



洋書
Mobile 3D Graphics: With OpenGL ES and M3G

CG の基礎、OpenGL ES 1.1 + EGL、M3G について書かれています。



洋書
OpenGL Shading Language
Second Edition

OpenGL ES 2.0 を使用する上で必須となるシェーディング言語 GLSL ES 1.00 の基となった OpenGL 2.0 のための GLSL 1.10 のバイブル的書籍です。
GLSL ES 1.00 は組み込み用途のため、GLSL 1.10 と異なる部分もありますが、 GLSL ES 1.00 を理解する上で GLSL 1.10 は不可欠な存在です。

注意) 現在、オレンジ本は第3版が出ています。

その他の書籍についてはこちらをご覧ください。


■リンク






[3D TOPメニュー]
[OpenGL] [irisGL] [VRML] [作品集] [イエローページ]
[書籍紹介] [DVD]
[この Web ページについて] [アンケート] [予定]
[OpenGLストア]

[Namazu TOPメニュー]