opengl - 在 Apple 的 'OpenGL Shader Builder' 中使用 .vert 和 .frag 扩展名

标签 opengl glsl opengl-shader-builder

我刚刚发现了 OpenGL Shader Builder在 Apple 的开发者工具中。好像很有用。唯一的麻烦是它似乎坚持在保存对话框中使用 *.vs 和 *.fs,而我通常分别使用 *.vert 和 *.frag 作为我的着色器文件扩展名。有什么办法可以改变这些默认值吗? (这可能涉及一个 hacky 解决方案)

最佳答案

我首先使用了自定义的 #include 预处理器(制作起来非常简单!)

制作虚拟包装器着色器:

测试.vert

#include test.vs

测试.frag

#include test.fs

这是一个半糟糕的 hack,如果您正在共享代码,绝对不想将其包含在 svn/git/whatever 中,但是当您在调整时需要周转时非常有用。

随着越来越多的人最终使用几种不同的文件扩展名,我最终添加了更多加载着色器的方法。

LoadShader("MyShader", <List of preprocessors>)
LoadShader("vertex shader", "fragment shader", ... , <List of preprocessors>)

(这里简化了,真正传入的是一个结构体)

第一个函数将执行以下操作:

  • 带有 [".vert",".vs".. etc] 顶点着色器的文本文件
  • 用于片段着色器的带有[".frag",".fs".. etc]的文本文件
  • 等..

用户可以定义他们想要支持的文件扩展名。

第二个功能只是使用准确的文件名。在第一个函数中,可能的组合受到预处理器的限制。在第二个选项中,您可以组合所需的任何着色器文件,还可以使用预处理器进行修改。

这当然是简化的,但显示了总体思路。

关于opengl - 在 Apple 的 'OpenGL Shader Builder' 中使用 .vert 和 .frag 扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9474844/

相关文章:

c - 在 OpenGL 窗口中绘制 2D 叠加层(文本 + 图标)

linux - 如何在 Linux 中没有窗口管理器的情况下使用 OpenGL?

c++ - OpenGL:渲染超过 8 盏灯,怎么样?

c++ - 如何知道 CMakeLists 的库变量名?

opengl - 重用多个着色器存储 block 的绑定(bind)是否合法

c++ - glslang 无法解析内置函数

ios - 有没有办法在片段着色器中使用64个以上的向量?或替代?

android - 使用 glShaderBinary 时出现致命信号 11 和 INVALID HEAP ADDRESS IN dlfree 错误