Respuestas:
Use VBO en lugar de glStart () / glEnd (). Esto ahorra ciclos al transferir los datos a la memoria de la GPU.
glStart()/glEnd()
.
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)
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.
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.
glEnable(GL_CULL_FACES);
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.
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.
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.