GLSL中的printf?

时间:2010-08-06 02:10:55

标签: glsl

在C中,我可以调试代码:

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

...无论如何我只是在Vertex或Fragment着色器中转储一个值?我不在乎它是否缓慢;我只想转出价值。理想情况下,我想要一个如下设置:

  • 正常状态=通常运行GLSL着色器
  • 按键'd'=在 ULTRA 慢速模式下生成下一帧,其中“printfs”在 顶点/片段着色器将被执行并转出。

这可行吗? (我不关心性能;我只是想在一帧中这样做。)

谢谢!

4 个答案:

答案 0 :(得分:23)

不幸的是,这不可能直接。一个可能的解决方案是,我最终使用了很多(但我确信它在GLSL开发人员中非常普遍)是将值“打​​印”为颜色,而不是预期的最终结果。

当然这有很多局限性;例如,您必须确保您的值映射到(0,1.0)范围内。在这些情况下,modfract等函数变得有用。但是,一般来说,这就是我在GLSL中看到的“printf”等价物。

答案 1 :(得分:21)

您是否考虑过试用GLSL调试器而不是打印值?

例如,glslDevil将允许您逐步执行着色器的执行并检查每一步的变量。

答案 2 :(得分:3)

查看AMD CodeXL。它将允许您逐帧步进以检查opengl状态值,着色器代码和纹理内存。

http://developer.amd.com/tools-and-sdks/heterogeneous-computing/codexl/

答案 3 :(得分:-3)

您可以通过在制服中复制其值来查看要检查的变量,然后使用glGetUniformfv

获取该制服