GLSLprograma de sombreado múltiple VS interruptores uniformes

Estoy trabajando en una arquitectura de administrador de sombreadores y tengo varias preguntas para personas más avanzadas. Mi elección actual se opone a dos diseños que son:


1. Por programa de sombreado de material => Crear un programa de sombreado por material utilizado en el programa.

Contras potenciales:onsiderando que cada objeto puede tener su propio material, implica muchas llamadas de glUseProgram. Implica la creación de muchos objetos de programa de sombreado. Arquitectura más compleja que # 2.Pros:l código @Shader se puede generar específicamente para cada "opciones" utilizadas en el material.Si no me equivoco, los uniformes deben establecerse solo una vez (cuando se crea el programa de sombreado).


2. Programas globales de sombreadores => Cree un programa de sombreador por funcionalidad de sombreador (relámpago, reflejo, mapeo de paralaje ...) y use variables de configuración para habilitar o descartar opciones dependiendo del material a renderizar.

Contras potenciales:os uniformes deben cambiarse muchas veces por cuadrPros:Los programas de sombreado inferior cuentan. Menos SP swich (glUseProgram).


uede que note que mi tendencia actual es la n. ° 1, pero quería saber su opinión al respect

¿La configuración inicial de uniformes compensa la sobrecarga de llamadas de glUseProgram (no soy especialmente fanático de la velocidad)? En el caso n. ° 1, para cualquier consideración de memoria o rendimiento, ¿debo llamar a glLinkProgram solo una vez cuando creo el SP, o debo desvincular / vincular cada vez que llame a glUseProgram? ¿Hay mejores soluciones?

¡Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta