你们是如何调试GLSL的?

问题描述 投票:2回答:2

我最近尝试编写一些GLSL着色器代码并且在着色器没有绘制我预期的时候没有太多运气(基本上,屏幕上的一切都是黑色的)。以下是我尝试过的工具:

  1. Nvidia NSight VS集成 - 当我启动应用程序时立即崩溃,尝试使用简单的三角绘图耦合其他应用程序但仍然没有运气。搜索互联网和Nvidia论坛似乎是一个常见的问题,似乎没有找到任何解决方案。
  2. glslDevil - 它可以启动应用程序但是程序会在任何渲染发生之前保持退出,GL Trace是 wglMakeCurrent(0, 0) wglDeleteContext(00010000) ChildProcess exited 在调用glDeleteTexture(1,0314EF74)之后运行另一个应用程序时再次崩溃子进程已退出 我不知道发生了什么事。
  3. AMD PerfStudio 2 - 它似乎是最有前途的工具,成功运行我的应用程序并显示所需的信息。但是,它似乎不支持调试GLSL,我无法单步执行着色器并观察局部变量等?它似乎只支持DirextX着色器
  4. gDebugger - 它工作得很好,类似于AMD PerfStudio,但它不是一个调试器,不能单步执行着色器代码并观察任何局部变量。
  5. Printf - ??堆栈溢出的人说使用printf,如何在着色器中执行printf()?
  6. 将DirectX着色器转换为GLSL - 由于DirectX着色器具有更好的调试工具,并且有像http://sourceforge.net/projects/hlsl2glsl/这样的工具可以自动将hlsl转换为glsl,它似乎可以替代。我个人不喜欢这个解决方案,真的希望我有另一个选择。

谁能建议你如何调试你的GLSL?您成功使用了什么工具?

我正在运行:

  • NVidia GTX 460v2
  • Visual Studio 2008和2010
  • GLEW
  • OpenGL 2.0
debugging opengl glsl
2个回答
1
投票

你可以使用glDrawBuffers指定额外的输出,然后检查(你的printf)。

但是,当图元位于绘图区域之外时,这不会修复任何内容。

否则,这是通过纯粹的推理和心理调试进行的旧式编程。


1
投票

经过几个小时的努力,我终于让我的NSight在我的机器上工作了,我在这里写了这个过程并希望它能帮助有类似问题的人,

  1. https://developer.nvidia.com/nsight-visual-studio-edition-downloads下载NSight,它涉及几个下载步骤,只需按照说明操作即可。我之前安装了Nsight Tegra并在我的Visual Studio中获得了一个NSight菜单,但是,当我启动图形调试器时,应用程序立即崩溃。我认为NSight集成与NSight Terga一起破了,重新安装NSight按照上面的链接似乎解决了问题
  2. 运行NSight图形调试器时,我无法调试我的着色器代码,因为我的应用程序正在使用某些不兼容的功能,例如 glTexImage2D() glTexEnvf() 以及更多。图形调试器告诉我,我可以调用一个名为Nav.Launcher.exe的工具来查找我的应用程序中不兼容的函数列表。但是,我在硬盘中找不到该工具。
  3. 然后我决定使用gDEBugger再次运行我的应用程序并打开Breakpoints-> Break On Deprecated Function。这让我知道我在代码中调用的所有已弃用的函数。删除所有已弃用的函数后,可以启用NSight图形调试器的帧调试器功能,最后我可以在Visual Studio中逐行浏览着色器代码

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.