互換性のチェックや動作確認目的で OpenGL ES 2.0 自体の実行環境を集めています。まとめてみました。
また WebGL や NativeClient (NaCl) など、GPU/OS を問わず OpenGL ES 2.0 が 3D API の標準になりつつあります。 そのため Desktop 上でも OpenGL ES 2.0 を必要とするケースが増えています。
以前の OpenGL ES 2.0 Emulator は GPU のハードウエア Emulation が目的であり 1 のためでしたが、 今後は対応する API セットの一つとして、または Native なドライバとしておそらく 2 も増えて来ると思います。
なお OpenGL は下位互換性があるため OpenGL ES と OpenGL との差は少なく、両方で動作するアプリケーションを書くことは難しくありません。 これらの lib に依存しなくてもアプリケーション側で差を吸収することも可能です。
| サイト | 名称 | 用途 | API | win | mac | linux | lib | RADEON | GeForce | Intel GMA | GMA500 | 圧縮tex |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Qualcomm Developer Network | Adreno SDK | GPU Emu | EGL+ES2 | 32 | libEGL, libGLESv2 | ◯? | ◯? | ◯? | × | ATITC/ETC1 | ||
| Imagination PowerVR Insider | PVRVFrame | GPU Emu | EGL+ES2 | 32 | 32 | 32/64 | libEGL, libGLESv2 | ? | ? | ? | × | PVRTC/ETC1 |
| ARM Mali Developer Center | OpenGL ES Emulator | GPU Emu | EGL+ES2 | 32 | 32? | libEGL, libGLESv2 | ◎ | ◎ | ◎ | × | ETC1 | |
| NVIDIA Developer Zone | x86 Windows OpenGL ES 2.0 Emulator | GPU Emu | EGL+ES2 | 32 | libGLES20 | × | ◎ | × | × | S3TC(DXT) | ||
| Google angleproject | ANGLE Project | Application | EGL+ES2 | 32 | libEGL, libGLESv2 | ◎ | ◎ | ◎ | ◎ | S3TC(DXT) | ||
| AMD Developer Central | RADEON OpenGL ES 2.0 API | Application | EGL+ES2 | 32/64 | ? | ? | 無し | ◎ | × | × | × | 無し |
| OpenGL 4.1以降 | OpenGL ES 2.0 Compatibility | Application | ES2 | 32/64 | 32/64? | 32/64? | 無し | ◎ | ◎ | × | × | S3TC(DXT) |
対象の GPU 機能を再現することが目的。 そのため対象ハード相当に機能が制限されている。
HOST PC 側のビデオカード(GPU)の影響を受けるためどの環境でも安定して動作するとは限らない。 ドライバのバージョンによって影響を受けることも多い。
あくまで開発用なので、アプリケーションがそのまま組み込んで利用することはできない。
それぞれ付属の libEGL.dll, libGLESv2.dll を使用する。 import lib がセットとなっているため、それを link するだけで OpenGL ES 2.0 API が使えるようになる。 ヘッダ類は専用のものが付属してるが、よほど特殊な固有 extension を使わない限り khronos からダウンロードできる汎用のヘッダで十分。
Mali Emulator はシェーダーコンパイル時に毎回コンソールが開く。(Windows7 x64)
Tegra だけ lib 名が異なり関数の呼び出し規約も違う。 そのため汎用の GLES2/gl2.h などのヘッダを使えず、付属のヘッダを使う必要あり。 具体的には khrplatform.h が違う。
dll は 1つだが EGL も含まれている。
なぜか GLSL ES Version 1.1 を返す。
Windows の Direct3D 9 上で OpenGL ES 2.0 をエミュレーションするライブラリ。 OpenGL のドライバがなくても動作可能。
Atom Z シリーズ (GMA500 など) は OpenGL のドライバがなく OpenGL 2.0 以上が使えなかった。 この Angle Project のライブラリを用いれば GMA500 でも OpenGL ES 2.0 アプリケーションが動作することを確認済み。 (VAIO type P , Windows 7 x86 )
使い方は GPU Emulator と全く同じ。 libEGL や libGLESv2 を使うだけ。
RADEON のドライバに含まれる Native API。 64bit でも動く。
OpenGL 4.1 では OpenGL ES 2.0 相当の API が使える。 基本的には OpenGL のままで ES2 互換の追加 API やシンボル等で差を吸収。
関数のエントリさえ準備できればあとは GLES2/gl2.h でコンパイルできる。 gl.h 以外の API を取り出すため、Windows 上の通常の GL2 以降の命令や Extension と扱いは変わらない。
EGL ではないので EGL の制限を受けることがない代わりに プラットフォームごとに異なるコードが必要。 Windows なら WGL など。
WGL_EXT_create_context_es2_profile が無いので、通常の OpenGL として context を作成する。 この場合 Core Profile Context ではなく Compatibility Profile Context を指定しておく必要あり。
シェーダーは #version 100 を受け入れ、この場合 GLSL ES とみなす。 define symbol GL_ES は定義されないので、自分で定義しておく必要あり。
WGL_EXT_create_context_es2_profile なので、自分で context を作り直す必要あり。 具体的には version 2.0 で WGL_CONTEXT_ES2_POROFILE_BIT_EXT を指定する。
static const int opengl_es20[]= { WGL_CONTEXT_MAJOR_VERSION_ARB, 2, WGL_CONTEXT_MINOR_VERSION_ARB, 0, WGL_CONTEXT_FLAGS_ARB, 0, WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_ES2_PROFILE_BIT_EXT, 0, }; HGLRC hglrc= wglCreateContextAttribsARB( hDC, 0, opengl_es20 );
これで context を作りなおすと下記のように OpenGL ES 2.0 になる。
GL_VERSION: OpenGL ES 2.0 280.26 GL_RENDERER: GeForce GTX 460/PCI/SSE2 GL_VENDOR: NVIDIA Corporation GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.00
define symbol GL_ES が定義されているので RADEON と違い自分で宣言する必要がない。