ホーム < ゲームつくろー! < OpenGL ES 2.0技術編

その1 OpenGL ES 2.0が動く環境を用意する


 DirectXはDirectX SDK、要はプログラムする為のライブラリをダウンロードしてインストールする事で開発出来ました。DirectXの動く環境すなわち「実機」はWindows PCです。一方OpenGL ES 2.0の実機は携帯端末や家電製品などがターゲットです。逆に言えば、OpenGL ES 2.0の実機はWindows PCでは無い訳です。と言う事は、この開発をWindowsで行うには「エミュレータ」を通す事になります。



@ OpenGL ES 2.0のエミュレータを動かす環境を整える

 OpenGL ES 2.0をWindowsで開発する為のエミュレータは色々とあるようです。その中でGoogleが提供している「ANGLE(Almost Native Graphics Layer Engine)」を使う事にしました。理由はANGLEが2011.10にOpenGL ES 2.0.3の互換性テストに合格した事、OSSである事、EGL 1.4という各プラットフォームのウィンドウシステムとOpenGLを繋ぐライブラリを提供してくれている事、裏でDirectX9を通してくれている事(Windowsに優しい)、WebGLも見越せる事、など様々な利点があるためです。

 ANGLEは「angleproject」からダウンロードできます:
https://code.google.com/p/angleproject/

また、エミュレータとSDKの詳しいセットアップ方法についてはこちらのWikiに記載されています:
https://code.google.com/p/angleproject/wiki/DevSetup

この章の環境設定は上記のWikiを参考にしています。

 ANGLEを動かすためには以下の環境が必要のようです:

・ Windows SDK for Windows7
・ DirectX SDK(June 2010)
・ Visual C++ 2010 Express Edition

 DirectXを通してOpenGL ES 2.0をエミュレートするので、それ用の環境が必要と言う事ですね。


○ Windows SDK for Windows7

 こちらの「Install Now」からDLできます。winsdk_web.exeというネットワーク越しでのインストール実行ファイルがDLされますので、静々とインストールしましょう。

 一つ大きな注意があります。VisualStudio 2010 Service Pack 1がすでにインストールされている場合、Windows SDK for Windows 7のインストールが途中で失敗してしまいます。実際私はハマりました。回避するには、一度Service Pack 1をアンインストールする必要があります。これにはコマンドラインで以下のアンインストールコマンドを実行すると良いようです(情報はこちらhttp://stackoverflow.com/questions/4102259/directx-sdk-june-2010-installation-problems-error-code-s1023)):

MsiExec.exe /passive /X{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}
MsiExec.exe /passive /X{1D8E6291-B0D5-35EC-8441-6616F567A0F7}

実行すると「Visual C++ 2010 Redistributable Package version 10.0.40219 (Service Pack 1)」がアンインストールされます。その状態でWindows SDK for Windows7をインストールします。デフォルトのインストール先である「C:\Program Files\Microsoft SDKs\Windows\v7.1」にフォルダが出来ていればOKです。


○ DirectX SDK (June 2010)

 以下のMicrosoftのDownload Centerから直接インストーラ(DXSDK_Jun10.exe)をDLできます(アクセスするとDLが始まるので注意):
https://www.microsoft.com/en-us/download/confirmation.aspx?id=6812

572MB程DLサイズがあります。インストール中「Help Improve the DirectX SDK」というDirectX SDKの改良の為に情報を送信して良いかを尋ねる所があります。良いならYes、嫌ならNoです。後は静々と進めて下さい。デフォルトで「C:\Program Files\Microsoft DirectX SDK (June 2010)」というフォルダが出来ていればOK。


○ Visual C++ 2010 Express Edition

 これはVC++2010 EEが入っていない方のみの作業です。Visual Studioのダウンロードサイト(http://www.microsoft.com/visualstudio/eng/downloads#d-2010-express)からVisual C++ 2010 Express Editionをダウンロードしてインストールして下さい。



○ Visual Studio 2010 Service Pack 1再インストール

 MocrosoftのDownload Centerの「Microsoft Visual Studio 2010 Service Pack 1(インストーラー)」http://www.microsoft.com/ja-jp/download/details.aspx?id=23691からインストーラをダウンロードするか、Windows Updateを更新すると再インストール出来ます。インストールしないとANGLEのコードをビルド出来ない(ソルーションがうまく開かない)ので多分必須です。ちなみに、信じられないくらい長い時間がかかります(^-^;。



A ANGLEソースコードの取得

 ANGLEはOSS(オープンソースソフトウェア)なので、誰でも無料でコードをDL出来ます。ANGLEはgooglecodeの一つでSVN(サブバージョン)でバージョン管理されています。Windows上のSVNクライアントと言うとTortoiseSVNが有名です(http://tortoisesvn.net/)。SVNクライアントが入っていない方はDLしてインストールして下さい。

 ANGLEのリポジトリは http://angleproject.googlecode.com/svn/trunk です。お使いの環境の適当な所にフォルダを作成し、上記リポジトリをチェックアウトして下さい(SVNクライアントの使い方はここでは割愛します)。



B OpenGL ES 2.0エミュレータのDLL作成

 Aでチェックアウトしたフォルダ(ANGLEとします)のsrcフォルダ下に「ANGLE.sln」ソルーションがあります(VC++2010用です)。これを起動すると5つのプロジェクト(libEGL、libGLESv2、preprocessor、translator_common、translator_hlsl)が入ったソルーションが立ち上がります。これをビルドしてOpenGL ES 2.0エミュレータ用のDLLを作成します。

 このままビルドしても色々エラーが出てしまいます。パスが通っていないのが主な原因です。まずlibEGLのプロジェクトのプロパティを開き、以下のパスを通します:

インクルードパス C:\Program Files\Microsoft DirectX SDK %28June 2010%29\Include
ライブラリパス C:\Program Files\Microsoft DirectX SDK %28June 2010%29\Lib\x86

つまりDirectXのインクルードとライブラリのパスを設定するという事です。

 もう一つlibGLESv2も同様にDirectXとWindows SDKへのパスを通します:

インクルードパス C:\Program Files\Microsoft DirectX SDK %28June 2010%29\Include
ライブラリパス C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib
C:\Program Files\Microsoft DirectX SDK %28June 2010%29\Lib\x86

これでビルド出来るかなと思ったのですが、「InsertBuiltInFunctionsCommon」及び「InsertBuiltInFunctionsVertex」という関数が無いというリンカエラーが出ました(Rev.2426)。ANGLEのsrc/compiler以下を検索するとbuiltin_symbol_table.cppという実装ファイル内に実体があり、これがlibGLESv2プロジェクトに追加されていないために起きているようです。このファイルを追加すればリンカエラーが無くなりました。

 ビルドに成功するとルートフォルダの下にLibというフォルダが作られ、その下にあるReleaseフォルダ内に

・ libEGL.lib、libEGL.dll
・ libGLESv2.lib、libGLESv2.dll

が出来あがります。これらのlibとdllでOpenGL ES 2.0がエミュレートできます!



 結構な手順を経てlibとdllが出来ました。次の章でさっそくこれらを使ってみます。