Consejos de optimización de OpenGL [cerrado]


26

¿Qué consejos o trucos tienes para hacer que OpenGL sea más eficiente?

Respuestas:


16

Use VBO en lugar de glStart () / glEnd (). Esto ahorra ciclos al transferir los datos a la memoria de la GPU.


77
Más que eso, glBegin y glEnd quedaron en desuso en revisiones posteriores y se eliminaron por completo (y, por lo tanto, no funcionarán) en las versiones 3.xy superiores. Si solicita un contexto OpenGL 3.x, no podrá utilizarlos por completo.
Slurps Mad Rips

DirectX realmente te impone esto, no tiene un equivalente de glStart()/glEnd().
knight666

@SAHChandler No lo sabía. No me di cuenta de que estaba en desuso.
MrValdez

3
@SAHChandler: ¡Eso apesta! Aprendí todo mi dibujo con glBegin () y glEnd (). Noooo !!!

8

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.


2
Solo quería agregar que ahora es gratis.
DMan

8

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)


7

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.


6

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.


4
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.


4

No use glGet * cuando pueda acceder a variables locales, por ejemplo:

  • No consulte el tamaño de las texturas desde OpenGL, guárdelas al cargar variables
  • No consulte los anchos de línea / tamaños de puntos de OpenGL cuando pueda almacenar los cambios en su aplicación

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.


3

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.


Ten cuidado. Son útiles lotes menores y mayores, pero dependiendo de la plataforma objetivo, los lotes "demasiado grandes" disminuirán el rendimiento.
Andreas

3

¡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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.