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

Sam*_*art 124 opengl shader glsl

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

Nic*_*las 84

GLSL着色器没有标准文件扩展名.最常见的可能是.vert.frag,因为这些是在他们的一些工具使用3D实验室的扩展.但对于任何形式的标准扩展,这都是关于它的.

  • GLSLang,也称为[GLSL Reference Parser](https://www.opengl.org/sdk/tools/glslang/)或[Reference Compiler](https://www.khronos.org/opengles/sdk/tools/Reference-Compiler /)是[3Dlabs](http://en.wikipedia.org/wiki/3Dlabs)开发的工具之一.它在opengl.org和khronos.org上列为SDK工具.[README](https://www.opengl.org/sdk/tools/glslang/README.txt)列出了它对着色器文件所需的文件扩展名:`.vert`(vertex),`.frag`(fragment) ,`.tesc`(曲面细分控制),`.tese`(曲面细分评估),`.geom`(几何),`.comp`(计算). (36认同)
  • 我不认为.vert | .frag是着色器的良好扩展名.扩展名用于标识文件的常规类.他们应该把它们称为vertex.glsl和fragment.glsl. (18认同)
  • @SandeepDatta` .hpp`与`.cpp`?`.h`与`.c`?顶点和片段着色器之间的语法和语义差异比C/C++头文件和源文件之间的差异更多. (6认同)
  • 我也很惊讶,但顶点和片段着色器@SandeepDatta之间的语法差异不大?就像.h和.c可能共享很多共同点一样,但它们以不同的方式使用. (5认同)

Col*_*Two 84

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

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

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


dat*_*olf 17

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

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

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

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

但这是我的选择,从技术上讲,我的程序甚至不执行任何命名或扩展方案.命名是让人类阅读并知道其中的内容; 有一个共同的主要扩展名要求我只有一个文件扩展名集的语法高亮规则.

  • 我意识到我在OS X论证上迟了两年,但我觉得我应该投入两分钱.UNIX层之上的所有内容都使用LaunchServices来确定文件关联.每个文件都有一个类型标识符,如`com.stackoverflow.file`,它存储为元数据.如果元数据条目存在,LaunchServices会首先尝试从MIME类型中猜测它.如果没有,它将寻找扩展名.如果它不匹配,它将查找HFS创建者代码.如果没有,它会放弃.LaunchServices永远不会尝试通过其标头或魔术字节来识别文件. (9认同)
  • @FrederikSlijkerman:不,它没有.MacOS X的核心是Unix,文件扩展名从未用于识别事物.是的,标准类型获得标准文件扩展名,但这只是人类可读性的东西.也许Finder可能依赖文件扩展名作为某些类型的启发式方法.但是如果它只能通过标题或一些魔术字节识别文件,它就会使用它.像任何基于Unix的系统一样. (6认同)
  • Downvoted,因为OS X主要使用文件扩展名多年. (5认同)
  • +1我将它们命名为_effect-name_-fs.glsl或_effect-name_-vs.glsl. (3认同)
  • 这意味着确定OS X上文件类型的最常用方法是扩展.但这仅用于识别应该使用哪个应用程序来打开哪个文件.一旦应用程序打开文件,它就可以自己决定它想要用它做什么,无论扩展名对于内容类型是否正确. (2认同)

Wea*_*unt 7

正如其他人所提到的,从最严格的意义上来说,没有正确的答案.它确实提到Sublime(已确认为v2和v3)也期望.vert和.frag用于语法突出显示和验证.

  • 我相信只有你在Sublime中安装了一个GLSL库,例如https://github.com/WebGLTools/GL-Shader-Validator - 我的默认Sublime无法识别扩展名. (2认同)
  • 截至目前,sublime-glsl (https://github.com/euler0/sublime-glsl) 是最流行的 GLSL 插件,它接受以下扩展集:`vs、fs、gs、vsh、fsh、gsh、vshader 、fshader、gshader、vert、frag、geom、tesc、tese、comp、glsl`。所以有多种选择:) (2认同)