问题描述
|
关闭。这个问题是基于意见的。它当前不接受答案。
解决方法
GLSL着色器没有标准文件扩展名。最常见的扩展名可能是
.vert
和.frag
,因为这些是3D Labs在其某些工具中使用的扩展名。但这适用于任何形式的标准扩展。
, 规范中没有官方扩展名。 OpenGL无法处理从文件加载着色器;您只需将着色器代码作为字符串传递,因此没有特定的文件格式。
但是,Khronos的参考GLSL编译器/验证器glslang使用以下扩展名来确定该文件用于的着色器类型:
.vert-顶点着色器
.tesc-镶嵌控件着色器
.tese-镶嵌评估着色器
.geom-几何着色器
.frag-片段着色器
.comp-计算着色器
, 通过扩展名识别文件类型是Windows特有的功能。所有其他操作系统使用不同的方法:MacOS X在文件系统条目中的特殊元数据结构中存储文件类型。大多数* nix都是通过针对已知“魔术字节”数据库测试其内部结构来识别文件的;但是,文本编辑器使用扩展名。
无论如何,GLSL源代码就像任何其他程序源文件一样:纯文本,这就是它们的文件类型。
您可以根据需要选择扩展名。我使用以下命名:
ts.glsl
gs.glsl
vs.glsl
fs.glsl
但这是我的选择,从技术上讲,我的程序甚至不执行任何命名或扩展方案。命名是为了让人类阅读并知道其中的内容。具有通用的主要扩展名要求我仅对一个文件扩展名集使用语法高亮规则。
, 正如其他人提到的那样,从最严格的意义上讲,没有正确的答案。值得一提的是,Sublime(已针对v2和v3进行了确认)也期望使用.vert和.frag进行语法突出显示和验证。
, 有两种编写着色器的方法。
您可以将顶点着色器和片段着色器内容存储在char *
变量中,然后将着色器编译,链接并将其附加到程序。
另一种方法是编写具有所需扩展名的单独的顶点和片段着色器文件,然后读取该文件以编译,链接并将着色器附加到程序。
因此,只要您知道如何阅读,诸如.vert / .frag,.vsdr / .fsdr等的命名约定都有效。
, 正如已经被多个响应所涵盖的那样,实际上并没有一个标准。您可以采用对您最有帮助的方法。
我可以看到使用特定于类型的着色器扩展的好处,但是我更喜欢对所有类型的着色器使用.glsl扩展,因为您只需要定义一次shell如何使用文件。
同样,如果您在Notepad ++中编辑着色器文件,这也是一个不错的选择,因为您可以将其配置为通过仅指定一个文件扩展名,自动将特定于语言的语法突出显示应用于所有着色器文件。
这种方法的缺点是,您需要利用自己的命名约定,以便通过其文件名确定着色器的类型,但对我而言,好处超过了成本。