在C中,我可以调试代码:
fprintf(stderr, "blah: %f", some_var);
GLSL中的...无论如何我只是在Vertex或Fragment着色器中转储一个值?我不在乎它是否缓慢;我只想转出价值。理想情况下,我想要一个如下设置:
这可行吗? (我不关心性能;我只是想在一帧中这样做。)
谢谢!
答案 0 :(得分:23)
不幸的是,这不可能直接。一个可能的解决方案是,我最终使用了很多(但我确信它在GLSL开发人员中非常普遍)是将值“打印”为颜色,而不是预期的最终结果。
当然这有很多局限性;例如,您必须确保您的值映射到(0,1.0)
范围内。在这些情况下,mod
,fract
等函数变得有用。但是,一般来说,这就是我在GLSL中看到的“printf”等价物。
答案 1 :(得分:21)
您是否考虑过试用GLSL调试器而不是打印值?
例如,glslDevil将允许您逐步执行着色器的执行并检查每一步的变量。
答案 2 :(得分:3)
查看AMD CodeXL。它将允许您逐帧步进以检查opengl状态值,着色器代码和纹理内存。
http://developer.amd.com/tools-and-sdks/heterogeneous-computing/codexl/
答案 3 :(得分:-3)
您可以通过在制服中复制其值来查看要检查的变量,然后使用glGetUniformfv