Следующая таблица показывает шаги создания шейдера:

Первый шаг — создание обьекта, контейнера шейдера. Функции, создающие его, возвращают дескриптор контейнера.

Синтаксис OpenGL 2.0:

GLuint glCreateShader(GLenum shaderType);

 

Параметр shaderType — GL_VERTEX_SHADER или GL_FRAGMENT_SHADER.

Синтаксис расширений ARB:

GLhandleARB glCreateShaderObjectARB(GLenum shaderType);

 

Параметр 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:

void glCompileShader(GLuint shader);

 

Синтаксис расширений ARB:

void glCompileShaderARB(GLhandleARB shader);