Android OpenGL ES 2.0 と 3.0 の切り替え

Desktop の OpenGL 4.x との互換性を考えるならば、
OpenGL ES 3.0 の方が圧倒的に相性が良いです。
DirectX で例えるなら Direct3D11/10 と Direct3D9 を比べるようなもの。
Direct3D11 (OpenGL4) と Direct3D10 (OpenGL ES 3.0) は同じ API 構造を
保っていますが Direct3D9 (OpenGL ES 2.0) は大きく異なります。

OpenGL は DirectX ほどの違いはなく API 上は上位互換性を保っています。
ですが Shader の構文や描画パイプラインの設計は、やはりどちらかに
合わせる必要があります。

設計が大きく異なるならば、OpenGL ES 2.0 と OpenGL ES 3.0 のバイナリを
完全に分けてしまった方が良いのかもしれません。

以前 NDK の dll を分離する方法を紹介しました。

Android NDK の初期化と dll の分離

もし dll を分割して 2段階で読み込んでいるなら、同じ方法で
バイナリを切り替えることができます。
例えば下記のように。

・libjniproxy.so
・libappmain_es2.so
・libappmain_es3.so

関連エントリ
Android OpenGL ES 3.0 対応 GPU を判定する方法
Android 4.4 Adreno 320 の OpenGL ES 3.0 と Version 判定
Android NDK の初期化と dll の分離