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

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

GLSL着色器没有标准的文件扩展名。 最常见的可能是.vert.frag ,因为这些是3D Labs在他们的一些工具中使用的扩展。 但这就是任何forms的标准扩展。

规范中没有官方扩展。 OpenGL不处理从文件加载着色器; 你只需要以stringforms传递着色器代码,所以没有特定的文件格式。

但是,Khronos的参考GLSL编译器/validation程序glslang使用以下扩展名来确定该文件的着色器types:

  • .vert – 一个顶点着色器
  • .tesc – 曲面细分控制着色器
  • .tese – 镶嵌评估着色器
  • .geom – 几何着色器
  • .frag – 片段着色器
  • .comp – 一个计算着色器

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

无论如何,GLSL的来源就像任何其他程序源文件:纯文本,这是他们的文件types。

你可以select你喜欢的扩展名。 我使用以下命名:

  • ts.glsl
  • gs.glsl
  • vs.glsl
  • fs.glsl

但这是我的select,在技术上我的程序甚至没有强制任何命名或扩展scheme。 命名是为了人类阅读和知道它的内容; 有一个共同的主要扩展需要我有一个语法highlighing规则只有一个文件扩展名集。

正如其他人所说的那样,从最严格的意义上说,没有一个正确的答案。 它确实提到Sublime(v2和v3确认)也期望.vert和.frag用于语法突出和validation。

编写着色器有两种方法。

您可以将顶点着色器和片段着色器内容存储在char *variables中,并编译,链接并将着色器附加到程序中。

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

所以命名约定,如.vert / .frag,.vsdr / .fsdr等都是有效的,只要你知道如何阅读它…