Во время инициализации OpenGL программа должна делать что-то вроде:
<Get Shader Source Code>
<Create Shader>
<Attach Source Code To Shader>
<Compile Shader>
Получение исходного кода может быть таким же простым, как положить его в строку типа: (Пример из SuperBible, 6-е издание)
static const char * vs_source[] =
{
"#version 420 core \n"
" \n"
"void main(void) \n"
"{ \n"
" gl_Position = vec4(0.0, 0.0, 0.0, 1.0); \n"
"} \n"
};
Проблема в том, что трудно редактировать, отлаживать и поддерживать GLSL-шейдеры непосредственно в строке. Поэтому получение исходного кода в строке из файла проще для разработки:
std::ifstream vertexShaderFile("vertex.glsl");
std::ostringstream vertexBuffer;
vertexBuffer << vertexShaderFile.rdbuf();
std::string vertexBufferStr = vertexBuffer.str();
// Warning: safe only until vertexBufferStr is destroyed or modified
const GLchar *vertexSource = vertexBufferStr.c_str();
Теперь проблема заключается в том, как отправить шейдеры с вашей программой? Действительно, исходный код доставки с вашим приложением может быть проблемой. OpenGL поддерживает "предварительно скомпилированные двоичные шейдеры", но Open Wiki утверждает, что:
Программные двоичные форматы не предназначены для передается. Неразумно ожидать, что разные поставщики оборудования принимать одинаковые двоичные форматы. Не разумно ожидать другое оборудование от того же поставщика, чтобы принять тот же двоичный файл форматы. [...]
Как практически поставлять шейдеры GLSL с вашим программным обеспечением на С++?