OpenGL着色语言有没有一款“lint”工具?

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

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

我没有找到这样的工具。我开始尝试编写一个,但我正在使用OpenGL ES,并且尝试编写链接到ES库的桌面程序时遇到了麻烦

也许我错过了什么。这样的工具存在吗?

在构建过程中,您可以使用图形驱动程序的着色器编译支持(至少在可用时)。然而,其中许多都太宽容了,会通过应该被捕捉到的错误。因此,我正在寻找一个严格的 GLSL 代码检查工具或验证器。 - Tronic
3个回答

5
你可以像编译C或C++程序一样,在命令行上构建着色器,或者采用你正在使用的其他方法。如果你正在使用Makefile,则只需添加着色器的编译即可。
你可以使用Cg编译器来编译Cg和GLSL着色器。它应该在所有平台上都可用。

Cg编译器会为您生成错误,因此您可以在构建脚本中处理它们。或者,您可以将Cg编译器绑定到自定义的C++应用程序中,并等待其返回任何错误,然后根据需要进行处理。 - ssube
看起来很有前途,但似乎不支持OpenGL ES 2.0,这是我需要的版本。 - benzado
你只需要在你的电脑上安装Cg编译器并编译着色器。Cg编译器可以作为命令行工具使用。 - BЈовић
使用Cg时,使用“-ogles”命令行选项以获得OpenGL/ES兼容性,并使用“-strict”选项进行严格的兼容性检查。 - Chris Dodd

2

1

你可以将Shader Toy适应于这个用途。它会将着色器代码编译成基于OpenGL ES的WebGL,并报告错误(同时也运行着色器,以便您检查输出)。

您需要一个Firefox(Minefield)或Chrome(Canary)的预发布版本才能运行它。

我不确定如何利用编译状态结果来停止构建过程...有从JavaScript将结果写入本地文件的方法,但它们有点棘手...

然而,在编译桌面应用程序之前,通过Shader Toy交互式测试着色器代码更改可能仍然是您开发过程的一种改进。由于您似乎正在为移动设备在桌面上进行开发(对吧?),这将是一个胜利。

另一方面,如果您成功使您的桌面应用程序链接到ES库,那么似乎很多开发人员都会受益。


1
苹果的开发者工具中有一个OpenGL着色器构建器,因此我大多数情况下都可以进行交互式测试。我希望语法检查能够捕捉到我在进行小改动时犯的愚蠢错误,或者当我尝试使用不存在的全局变量时(因为ES 2.0中删除了很多内容,但是很多教程假定使用桌面GLSL)。 - benzado

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接