日別アーカイブ: 2011年9月24日

Desktop の OpenGL ES 2.0 実行環境

Mobile 向け 3D API は OpenGL ES 2.0 で完全に統一されました。
今では WebGL や NaCl など Desktop PC でも使う機会が増えています。

もともと機能の確認やポータビリティのチェックのために情報を集めていましたが、
これらの OpenGL ES 2.0 実行環境をまとめてみました。
WGL_EXT_create_context_es2_profile

詳しくはこちら
 ・Desktop 向け OpenGL ES 2.0 実行環境

以下抜粋

Adreno SDK                    GPU Emu      EGL+ES2  ATITC/ETC1
PVRVFrame                     GPU Emu      EGL+ES2  PVRTC/ETC1
Mali OpenGL ES Emulator       GPU Emu      EGL+ES2  ETC1
Tegra OpenGL ES 2.0 Emulator  GPU Emu      EGL+ES2  S3TC(DXT)
ANGLE Project                 Application  EGL+ES2  S3TC(DXT)
RADEON OpenGL ES 2.0 API      Application  EGL+ES2
OpenGL 4.1 ES2 Compatibility  Application      ES2

● GPU Emulation 系

開発用なので目的が異なりますが、比較のために同じリストに入れています。
基本的には libEGL, libGLESv2 を呼び出すだけで EGL と OpenGL ES 2.0 の
API が使えます。固有の extension を使わなければ khronos の汎用ヘッダのまま
共有可能です。

ただし Tegra だけは別で、呼び出し規約が異なるため付属のヘッダフィルを
用いる必要があります。具体的には KHR/khrplatform.h の KHRONOS_APIENTRY
が違います。

● ANGLE Project

angleproject

多くの Emulator が OpenGL 2.x に変換しているのに対して、このライブラリは
DirectX (Direct3D 9) を使用します。
そのため Windows 上で OpenGL ドライバが提供されていない GPU でも動作します。

具体的には Atom Z シリーズの GMA500 (600) や、ノート PC 等でメーカー独自
のドライバ以外受け付けない場合に役に立ちそうです。

実際に VAIO Type P (Atom Z540 + GMA500, Windows 7 x86) 上できちんと
動作することを確認しました。

使い方は GPU Emulator 系と全く同じで libEGL/libGLSLv2 を呼び出すだけです。
CPU が低速なのでコンパイルに時間がかかりますが、Atom Z 系ネットブックでも
OpenGL アプリの開発ができるようになりました。

● RADEON OpenGL ES 2.0 API

Desktop 向け RADEON のドライバには EGL と OpenGL ES 2.0 API が
含まれています。

GeForce/RADEON で OpenGL ES 2.0 を動かす

RADEON 限定ですが安定して動作します。
import lib さえ用意すれば他の実行環境とほとんど同じ使い方が可能です。
ただし gl API は GetProceAddress() ではなく eglGetProcAddress() を使います。

GL_VERSION: OpenGL ES 2.0 10428 Release
GL_RENDERER: AMD Radeon HD 6750M
GL_VENDOR: Advanced Micro Devices, Inc.
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 1.0.17

● OpenGL 4.1 ES2 Compatibility

OpenGL 4.1 以上で OpenGL ES 2.0 の API 呼び出しができます。
比較的新しい GPU + ドライバの組み合わせが必要ですが、今後は対応ハードが
増えていくものと思われます。

(2011/09/26 追記以下は RADEON の場合)

Context 生成時は Core Profile Context (WGL_CONTEXT_CORE_PROFILE_BIT_ARB)
ではなく Compatibility Profile Context
(WGL_CONTEXT_COMPATIBILITY_PROFILE_ARB) を指定します。
WGL_EXT_create_context_es2_profile が無ければ
WGL_CONTEXT_ES2_PROFILE_BIT_EXT は特に必要無いようです。

関数のエントリさえ準備できればあとは GLES2/gl2.h でコンパイルが通ります。
EGL は無いので WGL をそのまま使用します。

シェーダーは #version 100 が利用可能でこの場合 GLSL ES と見なします。
GLSL 内の GL_ES の定義は自分で行う必要があるようです。

(2011/09/26 追記場合)

GeForce の場合は WGL_EXT_create_context_es2_profile があるので
WGL_CONTEXT_ES2_PROFILE_BIT_EXT で Context を作り直します。
具体的な方法について詳しくは こちら を参照してください。

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

関連エントリ
GeForce/RADEON で OpenGL ES 2.0 を動かす
OpenGL ES 2.0 Emulator