我应该在哪里保留着色器代码?

Mar*_*nig 5 c++ opengl shader glsl

这是一个哲学问题.

我想知道,如果有任何优雅的方法在标准的QtCreator项目中包含着色器代码.我所知道的唯一两种方式是:

  1. 着色器代码位于单独的文件中,例如"fragmentshader.frag",此文件在运行时读取,着色器代码将被编译和链接.

  2. 着色器代码是项目中包含的源文件之一的硬编码字符串.

两种方式对我来说都有点烦人.第一种可能性要求硬盘驱动器上的文件必须与可执行文件位于同一目录中(因此我必须将它们放在每个调试/发布目录中,最后得到我的着色器文件的几个副本)或者在特定的硬编码中我的驱动器上的目录,这似乎不便于移植.

第二种可能性让我感到困惑,因为你必须\n在你的着色器代码中加入一些东西,这会使格式变得丑陋.

这样做的"正确"方法如何?如果它有任何意义,我用c/c ++,OpenGL和GLSL编码.

编辑:我继续谷歌搜索...我注意到,例如图标文件可以保存在项目的特殊资源文件夹中.这样它就是一个文件,可以这样编辑,但仍然不能在运行时加载.有没有办法用着色器做到这一点?

Jag*_*oly 5

你可以做的另一件事是使用原始字符串文字,如果你有C++ 11:

const char shaderSource[] = R"glsl(
#version 450 core

...    

void main() {
    ...
}
)glsl";
Run Code Online (Sandbox Code Playgroud)

没有\n看到:)