В зависимости от того, чего вы пытаетесь достичь и каковы ваши текущие знания, вы можете использовать разные подходы.
Если вы пытаетесь изучать OpenGL 2.0, а также изучаете GLSL, я предлагаю взять Красную книгу и Оранжевую книгу в виде набора, так как они идут рука об руку.
Если вы хотите получить менее полное руководство, которое поможет вам начать работу, ознакомьтесь с Библией OpenGL .
Если я неправильно понял ваш вопрос, и вы уже знаете OpenGL и хотите больше узнать о GLSL, вот хороший пример phong shading , который показывает основы.
Компилировать шейдерный источник действительно просто,
Сначала вам нужно выделить слот шейдера для вашего источника, так же, как вы выделяете текстуру, используя glCreateShader
:
GLuint vtxShader = glCreateShader(GL_VERTEX_SHADER);
GLuint pxlShader = glCreateShader(GL_FRAGMENT_SHADER);
После этого вам нужно каким-то образом загрузить исходный код. Поскольку это действительно платформо-зависимое решение, решать вам.
После получения источника вы устанавливаете его с помощью glShaderSource
:
glShaderSource(vtxShader, 1, &vsSource, 0);
glShaderSource(pxlShader, 1, &psSource, 0);
Затем вы компилируете свои источники с помощью glCompileShader
:
glCompileShader(vtxShader);
glCompileShader(pxlShader);
Свяжите шейдеры друг с другом, сначала выделите программу, используя glCreateProgram
, присоедините шейдеры к программе, используя glAttachShader
, и свяжите их, используя glLinkProgram
GLuint shaderId = glCreateProgram();
glAttachShader(shaderId, vtxShader);
glAttachShader(shaderId, pxlShader);
glLinkProgram(shaderId);
Затем, как текстура, вы привязываете ее к текущей стадии рендеринга, используя glUseProgram
:
glUseProgram(shaderId);
Чтобы отменить привязку, используйте идентификатор 0 или другой идентификатор шейдера.
Для очистки:
glDetachShader(shaderId, vtxShader);
glDetachShader(shaderId, pxlShader);
glDeleteShader(vtxShader);
glDeleteShader(pxlShader);
glDeleteProgram(shaderId);
И это в основном все, вы можете использовать семейство функций glUniform
вместе с glGetUniform
для настройки параметров.