在 C 中,我可以调试如下代码:
fprintf(stderr, "blah: %f", some_var);
在GLSL中,有没有办法让我在顶点或片段着色器中转储值?我不在乎它是否慢;我只是想转储价值。理想情况下,我想要如下设置:
这可行吗? (我不关心性能;我只想在一帧中执行此操作)。
不幸的是,这是不可能直接进行的。不过,我最终经常使用的一种可能的解决方案(但我确信这在 GLSL 开发人员中很常见)是将值“打印”为颜色,以代替您预期的最终结果。
当然这有很多限制;其一,您必须确保您的值映射在
(0,1.0)
范围内。 mod
、fract
等功能在这些情况下非常有用。但是,总的来说,这就是我所看到的 GLSL 中的“printf”等效项。
除了打印值之外,您是否想过尝试使用 GLSL 调试器?
例如,glslDevil将让您逐步完成着色器的执行并检查每一步的变量。
查看AMD CodeXL。它可以让您逐帧检查 OpenGL 状态值、着色器代码和纹理内存。
http://developer.amd.com/tools-and-sdks/heterogeneous-computing/codexl/
您可以通过将其值复制到制服中来查看要检查的变量,然后使用
glGetUniformfv
获取该制服