Следующая таблица показывает шаги создания шейдера:
Первый шаг — создание обьекта, контейнера шейдера. Функции, создающие его, возвращают дескриптор контейнера.
Синтаксис OpenGL 2.0:
Параметр shaderType — GL_VERTEX_SHADER или GL_FRAGMENT_SHADER.
Синтаксис расширений ARB:
Параметр shaderType — GL_VERTEX_SHADER_ARB или GL_FRAGMENT_SHADER_ARB.
Вы можете создавать столько шейдеров, сколько хотите, но помните, что только в главной функции main объявляются вершинные шейдеры, и только в главной функции main объявляются пикселные шейдеры.
Следующий шаг — задать исходный код шейдера. Исходный код шейдера — это массив строк, хотя вы можете использовать указатель на единственную строку.
Синтаксис добавления кода шейдера для OpenGL 2.0:
void glShaderSource(GLuint shader, int numOfStrings, const char **strings, int *lenOfStrings);
// Параметры:
// shader — Дескриптор шейдера
// numOfStrings — число строк в массиве
// strings — массив строк
// lenOfStrings — массив с длинной каждой строки или с NULL, что значит, что в строке — завершающий NULL
Синтаксис добавления кода шейдера для расширений ARB:
void glShaderSourceARB(GLhandleARB shader, int numOfStrings, const char **strings, int *lenOfStrings);
// Параметры:
// shader — дескриптоп шейдера
// numOfStrings — число строк в массиве.
// strings — массив строк.
// lenOfStrings — массив с длинной каждой строки или с NULL, что значит, что в строке — завершающий NULL.
И наконец, шейдер должен быть скомпилирован.
Синтаксис OpenGL 2.0:
Синтаксис расширений ARB: