15

AndroidエミュレータはOpenGLES2.0をサポートしていますか?「はい、でもいくつかの設定を変更する必要があります」と言う人もいます。そして私はまた「いいえ、それはそれをサポートしていません、期間」を見ました。受け取ったエラーメッセージを含め、問題を修正するために私が行ったことは次のとおりです。

まず、AndroidManifest.xmlを変更して、次のコードを含めました。

<uses-feature 
    android:glEsVersion="0x00020000" />

<uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="17" />

次に、GLSurfaceViewをインスタンス化する場合は、次の一連のコードを使用してインスタンス化します。

super(context);

setEGLContextClientVersion(2);

setRenderer(new MyRenderer());
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

次に、どこを見ても、AVDマネージャーに移動し、エミュレーターを選択し、[ハードウェア]に移動し、[GPUエミュレーション]を追加して、ブール値を[はい]に設定する必要があると言いました。しかし、これが私が私のものを見たときに私が見るものです:

Android4.2エミュレータウィンドウのスクリーンショット。

特徴的なのは、AVD Managerに別のエミュレーターがあり、そのエミュレーターに「ハードウェア」テーブルがあることです。

私のAndroid2.2エミュレーターにはハードウェアテーブルがありますか?

そして、私が行っていることを正確に示すために、OpenGL ES 2.0でやりたいことを実行するコードをいくつか示します(これは主にAndroid独自のチュートリアルから取得しました)。

int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);

program = GLES20.glCreateProgram();
GLES20.glAttachShader(program, vertexShader);
GLES20.glAttachShader(program, fragmentShader);
GLES20.glLinkProgram(program);

OpenGL ES 1.0で動作するようにコードを変更したくないのは、多くの頭痛の種が必要になるためです。それを回避できれば、そうします。

最後に、プログラムを実行しようとすると、「残念ながら、停止しました」というウィンドウでプログラムが閉じます。これはLogCatが私に言ったことです:

12-05 06:16:27.165: E/AndroidRuntime(936): FATAL EXCEPTION: GLThread 81
12-05 06:16:27.165: E/AndroidRuntime(936): java.lang.IllegalArgumentException: No config chosen
12-05 06:16:27.165: E/AndroidRuntime(936):  at    android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:874)
12-05 06:16:27.165: E/AndroidRuntime(936):  at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1024)
12-05 06:16:27.165: E/AndroidRuntime(936):  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1401)
12-05 06:16:27.165: E/AndroidRuntime(936):  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
4

3 に答える 3

16

私はあなたの質問に「はい」と言うことができます。AndroidエミュレーターはOpenGLES2.0をサポートします。cocos2d-x v.2(OpenGL ES 2.0を使用)でアプリを作成しました。同じ致命的な例外がありました:同じスタックでGLThread81エラーが発生しました。追加することでこの問題を解決しました

gLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);

レンダラーを設定する前にsetRenderer:

gLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());

これで、Androidエミュレーターでアプリを実行できます。

https://stackoverflow.com/a/13719983/307547で私の質問と回答を参照して ください。このリンクの私の投稿には、AVD設定のスクリーンショットが含まれています。

http://www.cocos2d-x.org/boards/6/topics/12563?r=19274#message-19274

于 2012-12-05T13:20:24.343 に答える
5

ソースコードに新しい行を追加せずに問題を修正しました。avd-manager で、エミュレータ デバイスに「Use Host GPU」を設定しました。Geforce GTX 570 で問題なく動作するようになりました。

エミュレータ デバイスの API レベルは 16 で、マニフェストの最小 SDK は 15 です。

于 2013-10-09T17:10:03.973 に答える
4

同じ問題が発生しました。元のバギー コード:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d(this.getClass().getName(), "Into onCreate Draw triangle");
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  WindowManager.LayoutParams.FLAG_FULLSCREEN);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    if (detectOpenGLES20()){
        Log.d("GLES20", "GL ES 2.0 Supported..............!");
    } else {
        Log.d("GLES20", "GL ES 2.0 Not Supported...............!");
    }

    view = new GLSurfaceView(this);
    view.setEGLContextClientVersion(2);
    view.setEGLConfigChooser(true);
    view.setRenderer(new TriangleRenderer(view));
    setContentView(view);
}


解決方法:

a.) このコード行を置き換える

view.setEGLConfigChooser(true);

view.setEGLConfigChooser(8, 8, 8, 8, 16, 0);


b.) -gpu onEclipse 経由で設定 --> 実行 ---> ターゲット ---> 追加のエミュレータ コマンド ライン オプション

上記の説明にもう少し追加し
ます。上記のコードを使用しているときに、2 つの異なる例外メッセージに遭遇しました。

致命的な例外: GLThread 75 java.lang.IllegalArgumentException: configSpec と一致する構成がありません

java.lang.IllegalArgumentException: 構成が選択されていません

http://on-android-opengl2.blogspot.in/2013/05/android-opengl-es-20-emulator.htmlで説明されているより詳細なケース スタディ

于 2013-05-24T10:13:07.837 に答える