¿Qué consejos o trucos tienes para hacer que OpenGL sea más eficiente?
opengl
optimization
descuento
fuente
fuente
glStart()/glEnd()
.La punta estándar de perfil, perfil, perfil se aplica igual de bien aquí, aunque las herramientas son ligeramente diferentes.
gDEBugger es excelente para ayudarlo a ver exactamente lo que sucede debajo del capó. Sin embargo, es caro.
fuente
Estas son referencias de documentación de Apple en OpenGL, pero cada poquito ayuda, ¿verdad? ;)
Optimización del rendimiento de OpenGL: conceptos básicos
Optimización del rendimiento de datos de OpenGL en OS X
(Esta última es una aplicación de muestra)
Optimización de vértices
También hay una gran cantidad de videos disponibles sobre el tema (también de Apple) que hablan sobre las extensiones de OpenGL. Algunos de ellos son específicos de OS X, pero algunos otros están más generalizados y probablemente podrían aplicarse a Windows y Linux.
Puedes encontrar los videos aquí . Sin embargo, necesita iTunes y una cuenta de Apple para verlos (¡pero son gratis!: D)
fuente
Bueno, realmente depende de lo que planeas hacer, pero aquí están los conceptos básicos:
Su CPU es muy valiosa, mientras que su GPU es una bestia hambrienta. Desplaza todo lo que puedas a la GPU. Hoy en día puedes hacer esto con excelentes bibliotecas como OpenCL, CUDA y Thrust.
Enciende tu iluminación en un sombreador. Esto no solo ayudará a retener su cordura, sino que le permite cosas muy interesantes como sombreadores de toon e iluminación diferida .
Las partículas apestan. Incluso cuando se usan sprites de punto OpenGL.
fuente
Minimiza tus cambios de estado. En muchas plataformas, cada cambio de estado potencialmente vacía la tubería. Es mucho mejor agrupar elementos similares y cambiar el estado una vez.
fuente
Un forro simple que aplica el sacrificio de la cara posterior. Esto es excelente para recortar el recuento de polígonos. Observe también el sacrificio de Frustum / Occlusion para reducir los recuentos de poli.
Otra cosa a tener en cuenta es SIMD para sus vectores y cuaterniones (utilizados principalmente en rotaciones de cámara). Si no desea meterse con ASM, consulte libSIMD, que es una excelente biblioteca para manejar SIMD en C.
fuente
No use glGet * cuando pueda acceder a variables locales, por ejemplo:
Estas llamadas son realmente lentas
Mueva cosas no utilizadas fuera de glBegin - cláusula glEnd (ya sea glColor o glNormal o cualquier otra cosa) si no cambia en su interior. OpenGL es una máquina de estados, utiliza el último valor.
fuente
Minimizar los comandos de OpenGL es la clave. Por lo tanto, debe agrupar todos los comandos de dibujo. Para los juegos en 2D, es una buena idea usar Altas Texture y dibujar todos los sprites que compartan la misma textura en un comando opengl.
fuente
¡Lote, lote, lote! (Ab) use la GPU para renderizar tanto como sea posible en cada llamada de sorteo. Los juegos están principalmente limitados por la cantidad de cambios de estado, no tanto por la cantidad de triángulos.
fuente