我正在学习glsl着色,我遇到了不同的文件格式。我见过人们给出了他们的顶点和片段着色器.vert
和.frag
扩展。但我也看到了.vsh
和.fsh
个扩展名,甚至两个着色器都放在一个.glsl
文件中。所以我想知道是否有标准的文件格式,或者哪种方式是'正确的'?
答案 0 :(得分:81)
GLSL着色器没有标准文件扩展名。最常见的可能是.vert
和.frag
,因为这些是3D Labs在其某些工具中使用的扩展。但这就是任何形式的标准扩展。
答案 1 :(得分:80)
规范中没有官方扩展名。 OpenGL不处理从文件加载着色器;你只需将着色器代码作为字符串传递,因此没有特定的文件格式。
然而,glslang,Khronos'参考GLSL编译器/验证器,使用以下扩展来确定该文件的着色器类型:
- .vert - 顶点着色器
- .tesc - 曲面细分控制着色器
- .tese - 曲面细分评估着色器
- .geom - 几何着色器
- .frag - 片段着色器
- .comp - 计算着色器
答案 2 :(得分:16)
按扩展名识别文件类型是Windows特有的。所有其他操作系统使用不同的方法:MacOS X将文件类型存储在文件系统条目中的特殊元数据结构中。大多数* nixes通过针对已知“魔术字节”的数据库测试其内部结构来识别文件;但是文本编辑器使用扩展名。
无论如何,GLSL源代码与任何其他程序源文件一样:纯文本,这是它们的文件类型。
您可以根据需要选择的扩展程序。我使用以下命名:
但这是我的选择,从技术上讲,我的程序甚至不执行任何命名或扩展方案。命名是让人类阅读并知道其中的内容;有一个共同的主要扩展名要求我只有一个文件扩展名集的语法高亮规则。
答案 3 :(得分:7)
正如其他人所提到的,从最严格的意义上来说,没有正确的答案。它确实提到Sublime(已确认为v2和v3)也期望.vert和.frag用于语法高亮和验证。
答案 4 :(得分:-1)
有两种编写着色器的方法。
您可以将顶点着色器和片段着色器内容存储在char *
变量中,并将着色器编译,链接并附加到程序中。
另一种方法是使用您喜欢的任何扩展名编写单独的顶点和片段着色器文件,并将其读取以编译,链接并将着色器附加到程序。
所以命名约定,如.vert / .frag,.vsdr / .fsdr等都是有效的,只要你知道如何阅读它......
答案 5 :(得分:-2)
由于已经有多个答复涉及,所以实际上没有标准;取决于您采用对您最有帮助的方法。
我可以看到使用特定于类型的着色器扩展名的好处,但是我更喜欢对所有类型的着色器使用.glsl扩展名,因为您只需要定义一次shell如何使用文件即可。
类似地,如果您在Notepad ++中编辑着色器文件,这也是一个不错的选择,因为您可以将其配置为通过仅指定一个文件扩展名,自动将特定于语言的语法突出显示应用于所有着色器文件。
此方法的缺点是,您需要利用自己的命名约定来通过其文件名确定着色器的类型,但对我而言,好处超过了成本。