GLSL 着色器的正确文件扩展名是什么?

我正在学习的 glsl 着色和我遇到了不同的文件格式。我看到人们给他们的顶点和片段着色器 .vert.frag扩展。但我也看到了 .vsh.fsh扩展,甚至两个着色器在一个单一的 .glsl文件。所以我想知道是否有一个标准的文件格式,或者哪种方式是“正确的”?

84515 次浏览

Khronos 创建的 glslang 编译器根据扩展对着色器阶段进行了假设,但是除此之外没有标准的扩展(很多项目自己创建了自己的扩展)。Glslang 编译器关闭 .vert.tesc(TESselation 控制着色器) ,.tese(TESselation 评估着色器) ,.geom.frag.comp的键。

但是对于任何形式的标准扩展来说都是这样的。

通过扩展标识文件类型是 Windows 特有的。所有其他操作系统使用不同的方法: MacOSX 将文件类型存储在文件系统条目中的特殊元数据结构中。大多数 * nix 通过测试文件的内部结构来识别已知的“魔术字节”数据库; 但是文本编辑器使用扩展名。

无论如何,GLSL 源文件就像任何其他程序源文件一样: 纯文本,这就是它们的文件类型。

您可以随意选择扩展名。我使用以下命名:

  • 谢谢
  • Gs.glsl
  • Vs.glsl
  • Fs.glsl

但这是我的选择,技术上来说,我的程序甚至不强制执行任何命名或扩展方案。命名是为了让人们阅读并了解其中的内容; 拥有一个通用的主扩展名需要我为只有一个文件扩展名集提供一个语法高亮显示规则。

编写着色器有两种方法。

你可以将顶点着色器和片段着色器内容存储在一个 char *变量中,然后编译、链接并将着色器附加到程序中。

另一种方法是编写独立的顶点和片段着色器文件与任何扩展,你喜欢和读它来编译,链接和附加到程序着色器。

因此,像. vert/. frag、 . vsdr/. fsdr 等这样的变数命名原则都是有效的,只要你知道如何阅读它... ..。

正如其他人提到的那样,从最严格的意义上讲,没有一个正确的答案。值得一提的是,崇高(确认为 v2和 v3)也期望。和。用于语法突显和验证的碎片集。

规范中没有正式的延期。OpenGL 不处理从文件加载着色器; 您只需将着色器代码作为字符串传递,因此没有特定的文件格式。

然而,Khronos 的参考 GLSL 编译器/验证器 格拉斯哥俚语使用以下扩展来确定文件的着色器类型:

  • 顶点着色器
  • 镶嵌控制着色器
  • 镶嵌评估着色器
  • 几何着色器
  • 片段着色器
  • 计算着色器