Hola a todos! Girar ojos

Bueno he tenido que pararme a optimizar el motor de render y limpiar llamadas al fixed pipelines para poder tener un buen frame rate en modo DEBUG.

La textura del suelo la he hecho yo! de ahi la eleccion de colores magistral xD, menudo azul me ha salido… pero bueno.

Me encontré con una sorpresa enorme al crearme una pequeña clase para medir tiempos. La pasada de GL_SELECT tardaba 2 veces o más que la de render. Dios! xD intenté quitar muchas porquerias del medio pero aquello aún iba fatal.

Busqué y busqué por internet hasta leer en el foro de nVidia a un “tipo” que le recomendaba a otro que para usar GL_SELECT se trucara los drivers de las QUADRO FX. Decía basicamente que en los drivers de OpenGL a partir de cierta versión, nVidia y ATI habian decidido desactivar la aceleracion por HARDWARE para el render mode GL_SELECT. Me quedé de piedra, claro decian que lo normal era usar esa extensión en workstations y tal. Y yo pensando, serán!!… Y me dije a mi mismo, que les den! cogi mi calculo de ray tracing y usé mis BBOX por instancia. Para optimizarlo, organicé la función para que solo mirara en las listas del Resource Manager aquello que yo queria “encontrar”.

El resultado fue espectacular, los FPS no se caian y todo iba fluido, sin contar que aquella logica de orden me da muchisima ventaja a la hora de hacer ciertas cosas que actualmente hago con brushes para los tiles, o las criaturas etc…

Resumen:
Paso 1: acabar con la pasada de GL_SELECT
Paso 2: borrar todo atisbo de glPush y glPop Matrix y aquello de pintar lineas de debug y cosas similares. Fixed pipelines los justos. Para asignar entre sentencia begin y end de cada shader.
Paso 3: hacer como “read only” todas las pasadas de render. Esto es que, no se tenga que tocar nada de información de ninguna clase. Simplemente renderizar, que para eso es una pasada de “render” 🙂

Hasta aqui una experiencia más. Cada vez que en modo DEBUG va a bajos FPS, toca hacer algo de profiling, localizar el problema y ver si se puede optimizar. Llegará el momento en el que tenga que pasar a un estado HYBRID, que para quien no lo sepa es como configurar la compilación en modo RELEASE con información de debug. Esto es util sobre todo cuando tienes skinning, animaciones y tal, mucha multiplicación de matriz, eso asesina a la CPU Lengua y hace un cuello de botella enorme. O eso, o hacer que la libreria Math esté siempre en release, ya veremos.

Un saludo.