2022年現在において、 Android Studio に付属する Android Emulator で OpenGL ES 2.0を使用したものであっても動作するようになっています。昔はエミュレーター上で、そのようなアプリを動かすことができず、Android 実機がどうしても必要になっていましたが、便利な時代になったものです。
しかしながら、動作できるといっても動かすまでに多少苦労した点があったので、半分は自分のメモですが公開しておきたいと思います。
動作環境・前提条件など
Windows11 の環境で、 VMware Workstation や Docker Desktop を普段から使用している状況です。そのため、仮想化支援の機能が普段から有効状態となっています。このあたりについては、読み手の皆さんとは違うポイントになるかもしれません。
そのような状況なので Intel HAXM は使用できず、以下に示す Windows の機能で、各機能の有効化を行い使用しています。
- Windows ハイパーバイザープラットフォーム
- 仮想マシン プラットフォーム
使用した Android Studio は 2021.3.1 Patch1 でした。
設定前の状態
Android Studio で、Game Activity (C++) を使用したサンプルプロジェクトを作り、エミュレーターで実行してみたときのものが以下の通りです。これは、OpenGL ES のコンテキスト生成に失敗しており、OpenGL の情報を出そうとしてクラッシュしてしまっている、という状況です。
エミュレータの設定では、GPU 有効で Graphics : automatic に設定してあります。私の環境ではそれでも上記のようにうまく動作しない状況でした。
設定を変更する
エミュレーターの設定で、 OpenGL ES API level が Autoselect になっている箇所を、Renderer maximum (up to OpenGL ES 3.1) を選択することで、サンプルコードの実行でもエラーが発生しないようになります。
この画面はエミュレーターが起動した後の Emulator のビューで、 “…” のボタンを押すことで開くことができます。
この設定を変えた後は、エミュレーターを再起動してください。また、1度設定すれば次回以降も大丈夫のようで、設定が必要なのは初回のみです。
まとめ
OpenGL ES 3.x のコンテキストを生成するから、エミュレーターではまだ実行できないと考え、 少し前は Angle (DirectX11) による動作を指定していました。こちらでも動作するようになります。しかし、 renderer 側の設定は autodetect based on host のままにしておくほうが、都合がよい場面もあります。それでも実機と同じような実行パフォーマンスは期待してはいけませんが。
エミュレーターで OpenGL ES 3.x が動かないから諦めている人に、今回の記事が役立ってくれれば幸いです。
コメント