Prise en charge d'OpenGL ES 2.0 Pour Android?

j'ai vu plusieurs prises sur ce sujet et sa commence à me confondre. J'espère vraiment que quelqu'un peut me donner une réponse définitive! :)

je pense être direct: L'émulateur Android supporte-t-il OpenGLES 2.0? J'ai vu des gens dire "oui, mais il faut changer quelques réglages."et j'ai aussi vu "non, ça ne le supporte pas, Point."Voici ce que j'ai fait pour essayer de corriger le problème, y compris quelques messages d'erreur que j'ai eu.

First, J'ai modifié le AndroidManifest.xml doit contenir le code suivant:

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

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

alors, quand je veux instancier mon GLSurfaceView, j'utilise cette séquence de code pour l'instancier:

super(context);

setEGLContextClientVersion(2);

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

puis, partout où j'ai regardé, j'ai dit qu'il fallait aller dans le gestionnaire AVD, sélectionner l'émulateur, aller dans "Hardware", ajouter "GPU emulation" et régler le booléen à "yes". Cependant, voici ce que je vois quand je regarde le mien:

Screenshoot of my Android 4.2 emulator window.

ce qui est curieux, c'est que j'ai un autre émulateur dans mon gestionnaire AVD dont j'ai la table "Hardware":

What does my Android 2.2 emulator have the hardware table?

et juste pour vous montrer exactement ce que je fais, voici un certain code qui fait des choses que je veux faire dans OpenGL ES 2.0 (Je l'ai principalement obtenu de tutoriels propres 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);

Je ne veux pas changer mon code de nouveau pour travailler avec OpenGLES 1.0 parce qu'il faudra beaucoup de maux de tête et si je peux l'éviter, je le ferai.

enfin, quand j'essaie d'exécuter mon programme, le programme se ferme avec la fenêtre: "malheureusement, s'est arrêté."C'est ce que LogCat m'a dit:

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)

je dirai que je suis pas un expert en la matière et c'est ma première expérience avec OpenGL. Si quelqu'un a une idée de ce que je peux faire pour arranger ça, je lui en serai éternellement reconnaissant. :) Je vous remercie!

15
demandé sur Thanizer 2012-12-05 10:22:12

3 réponses

je peux dire oui à votre question. L'émulateur Android prend en charge OpenGLES 2.0. J'ai créé une application avec cocos2d-x v. 2 (qui utilise OpenGL ES 2.0). J'ai eu la même erreur fatale: GLThread 81 avec la même pile. J'ai résolu ce problème en ajoutant

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

avant de définir le renderer setRenderer:

gLSurfaceView.setCocos2dxRenderer(new Cocos2dxRenderer());

maintenant je peux lancer mon application sur Android emulator.

voir ma question et réponse à https://stackoverflow.com/a/13719983/307547 . Mon message sur ce lien contient screenshot avec les paramètres AVD:

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

16
répondu Petr 2017-05-23 12:31:11

je viens de corriger le problème sans ajouter de nouvelles lignes à mon code source. Dans l'avd-manager, j'ai mis "utiliser le GPU de L'hôte" pour mon émulateur. Fonctionne maintenant parfaitement bien sur mon GTX 570 Geforce.

niveau API sur l'émulateur est de 16, Et min-SDK dans le Manifeste est de 15.

5
répondu Felix 2013-10-09 17:10:03

a eu le même problème. Code Buggy D'Origine:

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);
}



Résolu par :



A.) Remplaçant cette ligne de code

view.setEGLConfigChooser(true);

avec

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



b) Paramétrage -gpu on via Eclipse -- > Run as - - - > Target - - - > options supplémentaires de la ligne de commande de L'émulateur

Ajouter un peu plus à la discussion ci-dessus:

Il y avait deux messages D'Exception différents que je suis tombé en travaillant avec le morceau de code ci-dessus

FATAL EXCEPTION: GLThread 75 Java.lang.IllegalArgumentException: No configs match configSpec

et

de java.lang.Illégalargumentexception: Non config choisie

une étude de cas plus détaillée relatée à http://on-android-opengl2.blogspot.in/2013/05/android-opengl-es-20-emulator.html

4
répondu aknon 2014-02-07 01:25:07