通常,使用GLSL等语言编写的着色器会在运行时加载到图形应用程序中。我想知道为什么不直接将着色器与应用程序一起编译,这样它们就不必后来再被加载了。像这样:
#define glsl(version, glsl) "#version " #version "\n" #glsl
namespace glsl { namespace vs {
//VERTEX SHADERS
//=========================
// simple VS
//=========================
constexpr GLchar * const simple = glsl(450 core,
layout(location = 0) in vec3 position;
void main() {
gl_Position = vec4(position, 1.0f);
}
);
} namespace fs {
//FRAGMENT SHADERS
//=========================
// simple FS
//=========================
constexpr GLchar * const simple = glsl(450 core,
out vec4 color;
void main() {
color = vec4(1.0f, 0.0f, 0.0f, 1.0f);
}
);
} }
我认为这不会导致太大的exe文件,并且可以加快加载时间;除非我对典型图形应用程序使用的着色器数量有误。我意识到您可能希望在编译后更新着色器,但这真的会发生吗?
有没有任何理由让我不想这样做?