En mi fondo de pantalla en vivo, estoy dibujando 3 cuadrículas con textura que cubren toda la pantalla. En Nexus One obtengo 40 fps. Estoy buscando formas de mejorar el rendimiento.Consejos para mejorar la tasa de relleno de OpenGL ES en Android
Los cuádriceps se mezclan uno encima del otro, las texturas se cargan desde RGB_8888 bitmaps. Las texturas son 1024x1024.
Tengo
glDisable(GL_DITHER);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glDisable(GL10.GL_LIGHTING);
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
cosas que he intentado, todo lo cual resulta en los mismos 40fps:
- Reducir tamaño de textura de 512x512 y 256x256
- extensión Uso draw_texture
- Inhabilite la combinación
- Cambie el filtrado de texturas de GL_LINEAR a GL_NEAREST
- Uso OISCIV (desesperado intento, ya que hay sólo 3 quads ...)
- ejecutar el código de dibujo en la actividad autónoma (en caso de ser un fondo de pantalla en vivo de alguna manera afecta el rendimiento)
Si dibujo 2 capas en lugar de 3, fps se eleva a 45 o así, y luego dibujar solo 1 capa ve que los fps suben a 55. Supongo que estoy limitado por la tasa de relleno, ya que apagar y encender las características potencialmente costosas resulta en el mismo fps, y lo único que parece mejorar los fps es simplemente dibujar menos ...
Estoy reflexionando sobre la idea de la compresión de texturas, pero soportando los diferentes formatos de compresión no parecen divertidos. ETC1 no tiene un canal alfa que yo necesite, y no estoy seguro si PVRTC y ATITC pueden usarse incluso desde Java y OpenGL ES 1.0 o 1.1.
Estaría encantado de escuchar ideas sobre qué más probar. Puedo dar un puntero a la versión actual del fondo de pantalla y capturas de pantalla si eso es útil.
borrar vs no borrar fotograma con glClear no afecta a fps para mí. Tampoco habilita/deshabilita la mezcla. Veré texturas múltiples, ¡gracias! –
OpenGL ES en mosaico Las GPU a menudo confían en que glClear se invoque como una sugerencia de que debe evitar volver a cargar el framebuffer en la memoria de mosaico antes de renderizar. Si no borras el framebuffer al comienzo de tu fotograma, esto puede afectar seriamente el rendimiento de dichos dispositivos, así que si no tienes una buena razón para dejar el glClear, es mejor dejarlo. – moonshadow