【问题标题】:Is there a lint tool for OpenGL Shading Language?是否有用于 OpenGL 着色语言的 lint 工具?
【发布时间】:2010-10-24 19:09:57
【问题描述】:

我已经开始使用 OpenGL 并编写着色器。我的应用程序在加载和编译着色器程序后检查错误,如果有问题,它会打印出信息日志。这非常适合捕获错误(我是新手,所以我做了很多),但我真正喜欢的是在构建时捕获这些错误。

如果我有一个 lint 工具可以简单地检查顶点或片段着色器的语法错误,我可以将它添加到我的构建过程中并让它停止构建。

我一直找不到这样的工具。我开始尝试写一个,但我正在使用 OpenGL ES 并且有trouble trying to write a desktop program that links against the ES libraries

也许我在某个地方错过了它。有这样的工具吗?

【问题讨论】:

  • 您可以在构建过程中使用图形驱动程序的着色器编译支持(至少在可用时)。但是,其中许多都过于宽容,并且会通过应该抓住的错误。因此,我正在寻找一个 strict GLSL lint 工具或验证器。

标签: opengl opengl-es glsl shader lint


【解决方案1】:

您可以在命令行上构建着色器,就像编译 c 或 c++ 程序或任何您正在使用的程序一样。如果您使用的是 Makefile,只需添加着色器的编译即可。

您可以使用 Cg 编译器来编译 Cg 和 GLGL 着色器。它应该在所有平台上都可用。

【讨论】:

  • Cg 编译器会为您吐出错误,因此您可以在构建脚本中处理它们。或者,您可以将 Cg 编译器绑定到自定义 C++ 应用程序中,并观察它是否返回任何错误,然后您可以根据需要进行处理。
  • 看起来很有希望,但似乎不支持 OpenGL ES 2.0,这是我需要的版本。
  • 你只需要在你的PC上安装cg编译器,编译shader即可。 Cg编译器可以作为命令行工具使用。
  • 对于 Cg,使用-ogles 命令行选项获得 OpenGL/ES 兼容性,使用-strict 选项获得严格的兼容性检查。
【解决方案2】:

此外,还有参考 GLSL 编译器(处理 OpenGL 和 OpenGL ES)

http://www.khronos.org/opengles/sdk/tools/Reference-Compiler/

【讨论】:

    【解决方案3】:

    您可以调整 Shader Toy 用于此用途。它针对 WebGL(基于 OpenGL ES)编译着色器代码并报告错误(还运行着色器,以便您检查输出)。

    你需要一个prerelease build of Firefox (Minefield) or Chrome (Canary) 来运行它。

    我不确定您将如何利用编译状态结果来停止构建过程...有 ways to write results to a local file from javascript 但它们有点毛茸茸...

    但是,在编译桌面应用程序之前,在 Shader Toy 中以交互方式测试着色器代码更改可能仍然是对您的开发过程的改进。由于您听起来像是在为移动设备开发桌面(对吗?),这将是一个胜利。

    另一方面,如果您设法让您的桌面应用程序能够与 ES 库链接,那么这似乎是许多开发人员将从中受益的工具。

    【讨论】:

    • Apple 的开发者工具中有一个 OpenGL Shader Builder,所以我主要是为交互式测试准备的。当我进行小的更改或尝试使用不存在的全局变量时,我希望语法检查能够发现愚蠢的错误(因为 ES 2.0 中删除了很多,但很多教程都假设桌面 GLSL)。
    最近更新 更多