GLSL 中的“printf”

问题描述 投票:0回答:4

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

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

GLSL中,有没有办法让我在顶点或片段着色器中转储值?我不在乎它是否慢;我只是想转储价值。理想情况下,我想要如下设置:

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

这可行吗? (我不关心性能;我只想在一帧中执行此操作)。

glsl
4个回答
26
投票

不幸的是,这是不可能直接进行的。不过,我最终经常使用的一种可能的解决方案(但我确信这在 GLSL 开发人员中很常见)是将值“打印”为颜色,以代替您预期的最终结果。

当然这有很多限制;其一,您必须确保您的值映射在

(0,1.0)
范围内。
mod
fract
等功能在这些情况下非常有用。但是,总的来说,这就是我所看到的 GLSL 中的“printf”等效项。


21
投票

除了打印值之外,您是否想过尝试使用 GLSL 调试器?

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


4
投票

查看AMD CodeXL。它可以让您逐帧检查 OpenGL 状态值、着色器代码和纹理内存。

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


-5
投票

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

glGetUniformfv

获取该制服
© www.soinside.com 2019 - 2024. All rights reserved.