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:
ce qui est curieux, c'est que j'ai un autre émulateur dans mon gestionnaire AVD dont j'ai la table "Hardware":
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!
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
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.
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