2017-10-11 73 views
0

我想调试GLSL着色器。 我需要的是发送字符串信息。 我已经试过FBO,但这不是一个干净的方式从GLSL着色器发送日志

有没有办法发送日志到主程序?

+0

请参阅我的[GLSL调试打印](https://stackoverflow.com/a/44797902/2521214)您只需确保为包含文本输出的区域的每个片段打印相同的东西。这在某些情况下可能会非常棘手,甚至不可能。例如:[GLSL Ray Tracer](https://stackoverflow.com/a/45140313/2521214) – Spektre

+1

https://github.com/msqrt/shader-printf – genpfault

+0

可能有[如何调试GLSL着色器?]的重复(https://stackoverflow.com/questions/2508818/how-to-debug-a-glsl-shader) –

回答

-1

不,没有办法将字符串从着色器发送到主程序。

你通常会做的是输出特定情况下的特定颜色。取决于你的硬件CodeXL或Nvidia NSight可能也有帮助。

+0

有没有官方的方式来调试着色器? – Bob5421

+0

是的:使用NSight或RenderDoc或任何GPU调试器适合您的硬件。你唯一不能做的就是将字符串写入某些输出。顺便说一句:GLSL根本没有字符串的构造。 – BDL

1

如果您想拥有某种自己的错误代码,则可以执行以下操作。

您可以使用变换反馈。 转换反馈无法存储字符串。它通常用于存储每个顶点或每个原始属性。您可以定义一些错误代码。例如

在应用

#define VERTICES_TRANSFORMED_WRONGLY 1

在VS着色器

#define VERTICES_TRANSFORMED_WRONGLY 1 

void main(void) 
{ 
    if(condition for error met) 
    write error code(VERTICES_TRANSFORMED_WRONGLY) to Transform feedback. 
} 

在应用

阅读,如果它h该变换反馈因为任何错误代码,你知道哪里出了问题。

您可以在每个着色器阶段之后附加变换反馈。 [编辑推荐BDL]: 你不能在片段着色器附加转换反馈,但你可以做一些类似于FBO的片段着色器阶段。

注:我仍然建议您使用已经被引用的工具,如Renderdoc,glDebugger,Nsight。