■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.0 | OpenGL 1.3 |
OpenGL ES 1.1 | OpenGL 1.5 |
OpenGL ES 2.0 | OpenGL 2.0 |
- OpenGL SC のバージョンは次の表で示したように、OpenGL ES/OpenGL の次のバージョンに対応します。
-
OpenGL SC のバージョン | 対応するOpenGL ES のバージョン | 対応するOpenGLのバージョン |
OpenGL SC 1.0 | OpenGL ES 1.0 | OpenGL 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_crossbar | ES 1.2 * |
GL_OES_textured_mirrored_repeat | ES 1.2 * |
GL_OES_texture_cube_map | ES 1.2 * |
GL_OES_blend_subtract | ES 1.2 * |
GL_OES_blend_func_separate | ES 1.2 * |
GL_OES_blend_equation_separate | ES 1.2 * |
GL_OES_stencil_wrap | ES 1.2 * |
GL_OES_extended_matrix_palette | ES 1.2 * |
GL_OES_framebuffer_object | ES 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 Name | Common | Common-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 Name | Common | Common-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.3 | OpenGL 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,CUBE | 2Dのみ |
マルチテクスチャマッピング | ○ | ○ |
テクスチャ座標自動生成 | ○ | × |
フォグ | ○ | ○ |
混合処理 | ○ | ○ |
クリップ | ○ | ユーザ追加クリップは× |
ポリゴンモード | ○ | × |
ビットマップ | ○ | × |
デプステスト、ステンシルテスト、 アルファテスト | ○ | ○ |
シザーテスト | ○ | ○ |
セレクション、フィードバック | ○ | × |
ディスプレイリスト | ○ | × |
エバリュエータとNURBS | ○ | × | カラーモード | RGBA,INDEX | RGBAのみ |
バッファ | COLOR,DEPTH,STENCIL,ACCUM | COLOR,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_COLORSPACE | EGL_VG_COLORSPACE |
EGL_COLORSPACE_LINEAR | EGL_VG_COLORSPACE_LINEAR |
EGL_COLORSPACE_sRGB | EGL_VG_COLORSPACE_sRGB |
EGL_ALPHA_FORMAT | EGL_VG_ALPHA_FORMAT |
EGL_ALPHA_FORMAT_PRE | EGL_VG_ALPHA_FORMAT_PRE |
EGL_ALPHA_FORMAT_NONPRE | EGL_VG_ALPHA_FORMAT_NONPRE |
NativeDisplayType | EGLNativeDisplayType |
NativePixmapType | EGLNativePixmapType |
NativeWindowType | EGLNativeWindowType |
|
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 が付属。
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
- OpenGL ES 1.0 Common-Lite Profile
- Enhanced Platform: MSM6275, MSM6550, MSM6800
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-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版が出ています。
|
■リンク
|
|