Desktop 向け OpenGL ES 2.0 実行環境

互換性のチェックや動作確認目的で OpenGL ES 2.0 自体の実行環境を集めています。まとめてみました。

また WebGL や NativeClient (NaCl) など、GPU/OS を問わず OpenGL ES 2.0 が 3D API の標準になりつつあります。 そのため Desktop 上でも OpenGL ES 2.0 を必要とするケースが増えています。

  • 2つの用途
    1. モバイル向けアプリ開発のための GPU エミュレーション。あくまで開発ツールとして
    2. Desktop 上で 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 Emulation

対象の GPU 機能を再現することが目的。 そのため対象ハード相当に機能が制限されている。

HOST PC 側のビデオカード(GPU)の影響を受けるためどの環境でも安定して動作するとは限らない。 ドライバのバージョンによって影響を受けることも多い。

あくまで開発用なので、アプリケーションがそのまま組み込んで利用することはできない。

Adreno, PowerVR, Mali

それぞれ付属の libEGL.dll, libGLESv2.dll を使用する。 import lib がセットとなっているため、それを link するだけで OpenGL ES 2.0 API が使えるようになる。 ヘッダ類は専用のものが付属してるが、よほど特殊な固有 extension を使わない限り khronos からダウンロードできる汎用のヘッダで十分。

Mali Emulator はシェーダーコンパイル時に毎回コンソールが開く。(Windows7 x64)

Tegra

Tegra だけ lib 名が異なり関数の呼び出し規約も違う。 そのため汎用の GLES2/gl2.h などのヘッダを使えず、付属のヘッダを使う必要あり。 具体的には khrplatform.h が違う。

dll は 1つだが EGL も含まれている。

なぜか GLSL ES Version 1.1 を返す。

Angle Project

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 OpenGL ES 2.0 API

RADEON のドライバに含まれる Native API。 64bit でも動く。

OpenGL 4.1 以上の ES2 Compatibility

OpenGL 4.1 では OpenGL ES 2.0 相当の API が使える。 基本的には OpenGL のままで ES2 互換の追加 API やシンボル等で差を吸収。

関数のエントリさえ準備できればあとは GLES2/gl2.h でコンパイルできる。 gl.h 以外の API を取り出すため、Windows 上の通常の GL2 以降の命令や Extension と扱いは変わらない。

EGL ではないので EGL の制限を受けることがない代わりに プラットフォームごとに異なるコードが必要。 Windows なら WGL など。

RADEON

WGL_EXT_create_context_es2_profile が無いので、通常の OpenGL として context を作成する。 この場合 Core Profile Context ではなく Compatibility Profile Context を指定しておく必要あり。

シェーダーは #version 100 を受け入れ、この場合 GLSL ES とみなす。 define symbol GL_ES は定義されないので、自分で定義しておく必要あり。

GeForce

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 と違い自分で宣言する必要がない。

opengl/glesemulator.txt · 最終更新: 2011/09/26 17:17 by oga
 
特に明示されていない限り、本Wikiの内容は次のライセンスに従います: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki