GLSL с проблемой настройки openGL2 - PullRequest
1 голос
/ 16 ноября 2009

Я пытаюсь использовать GLSL с openGL 2.0.

Может кто-нибудь дать мне хороший учебник, чтобы я мог правильно настроить GLSL.

С уважением Zeeshan

1 Ответ

5 голосов
/ 16 ноября 2009

В зависимости от того, чего вы пытаетесь достичь и каковы ваши текущие знания, вы можете использовать разные подходы.

Если вы пытаетесь изучать 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 для настройки параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...