有啥方法可以调试 GLSL 着色器?
Posted
技术标签:
【中文标题】有啥方法可以调试 GLSL 着色器?【英文标题】:Is There A Way I Can Debug An GLSL Shader?有什么方法可以调试 GLSL 着色器? 【发布时间】:2014-01-17 03:24:38 【问题描述】:有没有办法调试 glsl 着色器?包括断点和数据跟踪
我看到了一些简单的,让我看到了我的着色程序是什么着色器,但我不能在其中设置断点。
我需要检查矩阵的值,而仅仅抛出 glFragColor 是行不通的,因为要比较和检查的值太多了。
有没有一种简单的方法可以做到这一点?除了我只是写下我认为我可能拥有的价值观并在其他地方做我的数学。
当我试图了解所有 OpenGL 并知道如何在 DirectX 中导航时,这真的很烦人。我明白为什么有些人在难以找到资源时害怕使用 OpenGL。
【问题讨论】:
您的目标是什么版本的 OpenGL?忘掉普通着色器中的“断点”吧,GPU 与 CPU 异步运行,并且在不使用某种供应商特定工具的情况下没有/公开必要的中断逻辑来实现断点。此外,着色器并行(大量)运行。您可以强制着色器在 GL4 中因内存屏障而停止,并且您可以使用着色器存储缓冲区/图像加载/存储/变换反馈等来调查输出。但是所有这些都需要特定版本的 GL 和全面了解 GLSL。 我现在使用 3.3 及更高版本 在这种情况下,转换反馈可能是您最好的选择。曾经有一个工具glslDevil
提供了您所描述的许多功能(运行时断点除外),并且它是围绕转换反馈构建的。该工具仍然存在,但尚未更新,并且很少与现代 GL 实现/着色器一起使用。转换反馈将让您从 3.3 中的顶点/几何阶段获得输出,如您所知,对于片段着色器调试,您可能不得不依赖片段数据输出。..
该死。听起来谁制造了那个神奇的 glsl 工具会很有名哈哈。我将研究 TransformFeedback。如果一切都失败了,我可能需要给我找一个 OpenGL 渲染程序员,这样他就可以接受我的代码了..
您可能想研究 nvidia 并行 nsight 工具。我认为要调试您需要某种 2 卡设置 (nvidia),但我不确定它是否适用于 OpenGL。
【参考方案1】:
根据 NVIDIA Nsight 的开发更新,他们最近添加了 GLSL 调试功能 (https://developer.nvidia.com/nsight-visual-studio-edition-3_0-new-features)。我会先看看那里。 glslDevil (http://www.vis.uni-stuttgart.de/glsldevil/index.html) 看起来也不错。我自己没有尝试过任何一个程序,所以不能提供关于质量的第一手经验。不过,NVIDIA 对在 CUDA 中进行调试的支持给我留下了深刻的印象,因此抱有很高的期望。
【讨论】:
glsl devil 不会支持任何最近的东西,因为发布时间太早了。以上是关于有啥方法可以调试 GLSL 着色器?的主要内容,如果未能解决你的问题,请参考以下文章