Estoy haciendo el juego OpenGL para Android. Hasta ahora solo he usado una tubería de función fija, pero estoy renderizando cosas simples.
La canalización de funciones fijas incluye muchas cosas que no necesito. Así que estoy pensando en implementar sombreadores en mi juego para simplificar la canalización de OpenGL si puede mejorar el rendimiento.
Mejor rendimiento = mejor duración de la batería, a menos que fps esté limitado por el límite de software, no por la potencia del hardware.
opengl
android
shaders
performance
Kravemir
fuente
fuente
Respuestas:
En realidad no hay una pregunta aquí, excepto en el tema, pero un rendimiento mejorado y una vida útil de la batería mejorada podrían ser cosas completamente diferentes. Además, ¿mejorado en comparación con qué? En comparación con la tubería de función fija? En comparación con sombreadores complejos?
Los sombreadores simples deberían proporcionar una velocidad de fotogramas más alta (suponiendo que su velocidad de fotogramas esté limitada por el rendimiento de gpu en lugar de la frecuencia de actualización de la pantalla) en comparación con los sombreadores complejos, lo que podría considerar un mejor rendimiento. Sin embargo, eso no necesariamente mejorará la vida útil de la batería, aún podría estar utilizando el 100% de potencia de gpu / cpu, pero tendrá una velocidad de cuadro más alta porque hay menos para hacer cada cuadro.
En comparación con la tubería de función fija ... ¿quién sabe? Hoy en día, muchos proveedores de hardware implementan la canalización de funciones fijas en términos de sombreadores, por lo que solo está comparando sombreadores simples versus complejos nuevamente.
fuente
No tengo cifras actualizadas del consumo de energía de los teléfonos inteligentes, pero creo que la CPU y la GPU deberían estar en algún lugar al mismo nivel. Corrígeme si estoy equivocado.
En general, tratar de optimizar partes de su código que dependen del rendimiento siempre es algo bueno, no solo porque ahorra batería, sino también porque puede alcanzar dispositivos con hardware menos potente. También siempre animo a las personas a usar OpenGL ES 2.0 / OpenGL 3.0 para juegos, porque el poder de los sombreadores es, como dijiste, reducir el esfuerzo al mínimo y proporcionar mucha más flexibilidad.
Pero, en base a la suposición de que está renderizando algunos sprites 2D, diría que la GPU está principalmente en estado inactivo. Eso significa que la CPU posiblemente tendrá más impacto en la duración de la batería que la GPU, por lo que no debe esperar resultados demasiado positivos aquí. Le recomiendo que intente mejorar sus algoritmos que se ejecutan en la CPU antes de optimizar los de la GPU, pero también usaría sombreadores por razones de flexibilidad. Al menos si puede ignorar los dispositivos que existen sin soporte para OpenGL ES 2.0 (nuevamente, no tengo cifras ^^).
fuente