はじめに
AndroidなOpenGL ES 3.xサンプルをエミュレーターで確認しようと思っても、
お前のグラフィックデバイスは対応してないようだよとエラーを吐かれる。
まさか、そんなことないでしょと検索してみたら、同じようにハマっている人がいて質問していた。 そして、回答を見つけた。試してみてたらうまく行った。
Android EmulatorでOpenGL ES 3.xを有効にする方法
~/.android/advancedFeatures.ini
に
GLESDynamicVersion = on
を加えるとあった。
私の場合、Windowsユーザであるから、
C:\Users\takeshich\.android
を確認して、
advancedFeatures.ini
が存在しなかったので、新規作成し、
GLESDynamicVersion = on
を一行加えた。
実は、すでに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のものが動かなかったとは意外だった。 まだ、信じられてなくて、疑っている。