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


127

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


10
据我所知,它们没有“正确的”扩展名,因为OpenGL不会从磁盘读取它们。
zneak 2011年

2
有人称它们为.vs和.fs(以及.gs)以明确显示内部内容。但是就像zneak所说的,这没关系,没有“正确”的事情。
戴蒙

11
当选择语法突出显示时,GEdit会使用.glslv.glslf。那是我所见过的唯一重要的地方。
Piotr Praszmo 2011年

Answers:


90

GLSL着色器没有标准文件扩展名。最常见的可能是.vert.frag,因为这些是3D Labs在其某些工具中使用的扩展。但这适用于任何形式的标准扩展。


20
我认为.vert | .frag不是着色器的好扩展名。扩展名是用来标识文件的常规类的。他们可能应该将它们称为vertex.glsl和fragment.glsl。
2013年

5
我也感到惊讶,但是@SandeepDatta和顶点着色器和片段着色器之间的语法是否没有细微差别?.h和.c可能有很多共同点,但使用方式不同。
约瑟夫·洪弗里

7
@SandeepDatta .hppvs. .cpp.h.c。顶点和片段着色器之间的语法和语义差异比C / C ++头文件和源文件之间的语法和语义差异更大。
Miles Rout 2014年

1
@MilesRout甚至不谈论.cc

42
GLSLang,也称为GLSL参考解析器参考编译器,是3Dlabs开发的工具之一。在opengl.org和khronos.org上都将其列为SDK工具。该自述列出的文件扩展名,预计用于着色器文件:.vert(顶点),(.frag片段), .tesc(镶嵌控制), .tese(镶嵌评价), .geom(几何), .comp(计算)。
TachyonVortex 2014年

93

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

但是,Khronos的参考GLSL编译器/验证器glslang使用以下扩展名来确定该文件用于的着色器类型:

  • .vert -顶点着色器
  • .tesc -镶嵌控制着色器
  • .tese -镶嵌评估着色器
  • .geom -几何着色器
  • .frag -片段着色器
  • .comp -计算着色器

18

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

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

您可以根据需要选择扩展名。我使用以下命名:

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

但这是我的选择,从技术上讲,我的程序甚至不执行任何命名或扩展方案。命名是为了让人类阅读并了解其中的内容。具有通用的主要扩展名要求我仅对一个文件扩展名集使用语法高亮规则。


5
拒绝投票是因为OS X多年来一直主要使用文件扩展名。
Frederik Slijkerman 2012年

6
@FrederikSlijkerman:不,不是。MacOS X以Unix为核心,并且从未使用文件扩展名来识别事物。是的,标准类型具有标准文件扩展名,但这仅仅是人类可读的事情。Finder可能依赖文件扩展名作为某些类型的试探法。但是,如果它可以仅通过其标头或某些不可思议的字节来识别文件,它将使用该文件。像任何基于Unix的系统一样。
datenwolf 2012年

3
+1我将其命名为效果名称 -fs.glsl或效果名称 -vs.glsl。
legends2k 2014年

9
我意识到我对OS X的争论已经迟了两年,但是我觉得我应该付出两分钱。UNIX层之上的所有内容均使用LaunchServices来确定文件关联。每个文件都有一个类型标识符,如com.stackoverflow.file,存储为元数据。如果元数据条目存在,LaunchServices会首先尝试从MIME类型猜测它。如果没有,它将寻找扩展名。如果不匹配,它将寻找HFS创建者代码。如果没有,它会放弃。LaunchServices绝不会尝试通过文件头或魔术字节来识别文件。
zneak 2014年

2
这意味着在OS X上确定文件类型的最常见方法是扩展名。但是,这仅是为了确定应使用哪个应用程序打开哪个文件。一旦应用程序打开了文件,它就可以自己决定要做什么,而不管扩展名对于内容类型是否正确。
zneak 2014年

7

正如其他人提到的那样,从最严格的意义上讲,没有正确的答案。值得一提的是,Sublime(已针对v2和v3进行了确认)也期望使用.vert和.frag进行语法突出显示和验证。


2
我相信只有在Sublime中安装了GLSL库(例如github.com/WebGLTools/GL-Shader-Validator)时这才是正确的 -我的默认Sublime无法识别扩展。
航空

到目前为止,您链接的lib是最受欢迎的(并且可能是唯一的)GLSL lib,我将期望的东西称为sublime的期望。如果您称其为高估,我将认罪。但是,是的,您至少在那种崇高的意义上是正确的,因为尽职的文本编辑器会在忽略它不知道的扩展名的同时打开任何文本文档。
Weavermount 2014年

1
到目前为止,sublime-glsl(github.com/euler0/sublime-glsl)是最流行的GLSL插件,它接受以下扩展集:vs, fs, gs, vsh, fsh, gsh, vshader, fshader, gshader, vert, frag, geom, tesc, tese, comp, glsl。所以有很多选择:)
F Lekschas 18/12/12

-1

有两种编写着色器的方法。

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

另一种方法是编写具有所需扩展名的单独的顶点和片段着色器文件,然后读取该文件以进行编译,链接并将该着色器附加到程序。

因此,只要您知道如何阅读,诸如.vert / .frag,.vsdr / .fsdr等的命名约定都有效。


-2

正如已经有多个答复所涵盖的那样,实际上并没有一个标准。由您决定采用对您最有帮助的方法。

我可以看到使用特定于类型的着色器扩展的好处,但我的首选是对所有类型的着色器使用.glsl扩展,因为您只需定义一次shell如何使用文件。

同样,如果您在Notepad ++中编辑着色器文件,这也是一个不错的选择,因为您可以将其配置为通过仅指定一个文件扩展名,自动将特定于语言的语法突出显示应用于所有着色器文件。

这种方法的缺点是,您需要利用自己的命名约定,以便通过其文件名确定着色器的类型,但对我而言,好处超过了成本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.