J'ai modifié un exemple d'application opengl pour certains tests de vitesse qui ont vraiment l'air lent et j'aimerais savoir si je fais quelque chose de mal ici.Android opengl est-il vraiment plus lent que le canvas?
La configuration, le chargement & La liaison et le rendu sont des fonctions différentes et affichent un carré sur l'écran, mais à une vitesse de 6 fps. Le même code que j'ai écrit est beaucoup plus rapide avec canvas.
Que puis-je faire pour accélérer cela, et je veux dire accélérer sérieusement?
(PS: Je l'ai déjà essayé glDrawTexiOES et plus vite il en est encore loin toile près)
// Setup of opengl
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
// Loading & Binding of Texture
InputStream is = context.getResources().openRawResource(R.drawable.t2);
map = BitmapFactory.decodeStream(is);
gl.glGenTextures(1, textures, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[i]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, map, 0);
// Rendering
public void draw(GL10 g, int screenx, int screeny, int[] mem)
{ GL11 gl = (GL11) g;
//Point to our buffers
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
//Set the face rotation
gl.glFrontFace(GL10.GL_CCW);
//Enable the vertex and texture state
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
//Bind our only previously generated texture in this case
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
//Draw the vertices as triangles, based on the Index Buffer information
gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_BYTE, indexBuffer);
// Cleanup
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
}
Testez-vous sur un périphérique réel? Je ne serais pas surpris si OpenGL était si lent dans l'émulateur. – wolfgang
Je l'utilise dans une machine virtuelle où il fonctionne beaucoup plus vite que sur un périphérique réel. Au moins beaucoup plus vite que sur un onglet de galaxie que je pourrais tester et les fps étaient vraiment * très * décevants ... – HardCoder
Je ne vois absolument rien dans votre code qui expliquerait pourquoi il devrait fonctionner à moins de 60fps sur un onglet de galaxie (en supposant que les indices contiennent un carré = deux triangles). Le problème pourrait-il être ailleurs? Comment mesurez-vous fps? – wolfgang