shaders programming glsl

glsl - shaders - shader programming



printf en GLSL? (4)

En C, puedo depurar código como:

fprintf(stderr, "blah: %f", some_var);

en GLSL ... ¿hay alguna forma de que simplemente descargue un valor en un sombreado Vertex o Fragment? No me importa si es lento; Solo quiero descargar el valor. Idealmente, quiero una configuración como la siguiente:

  • estado normal = ejecuta el sombreador GLSL normalmente
  • presione la tecla ''d'' = el cuadro siguiente se genera en el modo ULTRA lento, donde los "printfs" en el sombreador Vertex / Fragment se ejecutan y se descartan.

¿Es esto factible? (No me importa el rendimiento, solo quiero hacer esto para un cuadro).

¡Gracias!


Desafortunadamente no es posible directamente. Sin embargo, una posible solución, que termino usando mucho (pero estoy seguro de que es bastante común entre los desarrolladores de GLSL) es "imprimir" valores como colores, en lugar del resultado final deseado.

Por supuesto, esto tiene muchas limitaciones; por un lado, debes asegurarte de que tu valor (0,1.0) en un rango de (0,1.0) . Las funciones como mod , fract etc. resultan útiles en estos casos. Pero, en general, esto es lo que veo como el equivalente "printf" en GLSL.



En lugar de imprimir valores, ¿ha pensado en probar un depurador GLSL?

Por ejemplo, glslDevil te permitirá pasar por la ejecución de tu sombreador y examinar las variables en cada paso.


Puede ver la variable que desea verificar copiando su valor en un uniforme y luego obtener ese uniforme con glGetUniformfv