debugging着色器代码?

我正在写一个游戏引擎,当我使用透视相机时,我会看到一个黑屏。 我不会问这是为什么,因为会有很多代码可以分享,坦率地说,我觉得这个问题有点儿麻烦,

麻烦的是我不知道如何debugging它。 所有的变化是我的投影matrix,如果我的投影matrix看起来很好,我不知道为什么它不起作用。 理想情况下,我会打印出各种东西的值作为着色器进行计算,但GLSL不方便没有printf()函数。

所以我的问题是:如何debugging我的问题? 我能想到的唯一的事情就是检查尽可能多的价值,因为我可以客户端,然后通过排列编程,但我已经做到了,并没有得到任何。 有什么办法可以看到显卡上发生了什么? 有没有一种完全不同的技术可以使用?

我正在使用GLSL版本420(和该版本特有的function),所以我不认为glslDevil是一个选项,考虑到它是在2010年的最后更新。

编辑

我设法通过一些完全不相关的debugging来解决我的问题。

你也可以使用像glIntercept这样的程序,就像PIX,但是对于OpenGL。 在拦截并logging所有调用之后,还可以显示着色器的使用情况,并在运行时编辑着色器。 最后一个选项(在运行时编辑着色器)可能在debugging时非常有用,因为您可以继续编辑部分内容,直到出现错误,并且可以通过输出颜色快速debugging值。

http://code.google.com/p/glintercept/

虽然我不确定,但NVIDIA Nsight应该能够debugging着色器,至less我认为它支持以前版本的GLSL(你应该能够find)。 它与Visual Studio很好地集成在一起,并不容易,但是有很多有用的东西,但是在旧版本中,你需要两台带有GPU的机器来通过networkingdebugging着色器(而最新版本说它允许“本地”debugging) 。 此外,检查着色器devise器[2]似乎是一个有用的IDE(但缺乏GLSLdebugging)。

[1] http://developer.nvidia.com/content/nvidia-nsight-visual-studio-edition

[2] http://www.opengl.org/sdk/tools/ShaderDesigner/

不幸的是,debuggingopengl并不容易。 这里是我发现有用的东西:

  • 每次调用后使用glGetError
  • 尝试使用新的debugging扩展(ARB_debug _ ???)
  • 每次调用后使用gDebugger查看屏幕上显示的内容
  • 使用apitrace查看每个opengl命令后会发生什么
  • 修改着色器根据当前input输出不同的颜色,并尝试理解为什么它显示某种颜色
  • 禁用每个限制绘图function的openglfunction:剪刀testing,深度testing,背面剔除等。

我个人还使用RenderMonkey。 然而,这并不完全适合这个确切的问题,因为它只是一个真实的应用程序的外观,因此有一些奇怪的限制。 这是支持,但我没有find任何更好的debuggingGLSL。