なんとなく

誰得感満載な記事が多いかも。Mono関係とLinuxのサーバ関係、レビューとか。

Android EmulatorでOpenGL ES 3.xを有効にする方法

はじめに

AndroidOpenGL ES 3.xサンプルをエミュレーターで確認しようと思っても、

f:id:takeshich:20181012173423p:plain

お前のグラフィックデバイスは対応してないようだよとエラーを吐かれる。

まさか、そんなことないでしょと検索してみたら、同じようにハマっている人がいて質問していた。 そして、回答を見つけた。試してみてたらうまく行った。

Android EmulatorでOpenGL ES 3.xを有効にする方法

stackoverflow.com

~/.android/advancedFeatures.ini

GLESDynamicVersion = on

を加えるとあった。

私の場合、Windowsユーザであるから、

C:\Users\takeshich\.android

を確認して、

advancedFeatures.ini

が存在しなかったので、新規作成し、

GLESDynamicVersion = on

を一行加えた。

f:id:takeshich:20181012171555p:plain

実は、すでにAndroid EmulatorでOpenGL ES 3.xは有効になっている?

ふと疑問が芽生える。

「なぜデフォルトで有効になっていないのか?」

すでにデフォルトで有効になっているという記述があるが、条件がついている。グラフィックボードやチップによっては動かないものもあるようである。 また、Android O(8.x)だけとある。

OpenGL ES 3.x is now enabled by default for system images and host GPUs that support OpenGL ES 3. Currently, only Android O (API level 26) and Windows/Linux hosts support OpenGL ES 3. https://developer.android.com/studio/releases/emulator#26-1

いろいろ試してみたが、アプリケーションのターゲットの最小バージョンをAndroid O(8.0)にしても、advancedFeatures.iniにGLESDynamicVersion = onを 加えなければ、エミュレータで「お前のグラフィックデバイスは対応してないようだよ」とエラーが出た。

デフォルトで有効になる条件はよくわからなかった。

腑に落ちない点はもう一つあって、そもそもOpenGL ES 3.xを結構最近になってエミュレータでサポートしたようだ。この記事は2017年の5月である。 OpenGL ES 3.xはAndroid 4.3からサポートされていて、Android 4.3は2013年の7月にリリースされた。あまりにもサポートするまでに年数たち過ぎてないか?

サポートされたからいいけど、それまでは実機でのみのデバッグだったのか。 5年ぐらい前にOpenGL ES 3.0のサンプル確認しようとして同じように怒られた。 当時は確認可能な実機も持っていなかったのでエミュレータ対応してないんだと仕方ないかと思っていた。

ここ数年、Androidの実機を持っておらず、エミュレータで確認していた。そして、試しているアプリもOpenGL ES 2.0にしか対応させていなかった。 ここに来て、オクルージョンカリングや頂点テクスチャなどのOpenGL ES 3.x以降の処理の必要を感じ、確認をというところだった。 エミュレータではOpenGL ES 2.0のは動いていたので、去年までエミュレータOpenGL ES 3.xのものが動かなかったとは意外だった。 まだ、信じられてなくて、疑っている。