Получение переменных OpenGL Shader в C ++ без написания собственного анализатора - PullRequest
0 голосов
/ 25 сентября 2018

Я ничего не мог найти по этому поводу, так что вот что я пытаюсь сделать, это создать общий игровой движок, я хочу иметь возможность загружать любой 3D-объект и применять любой шейдер к этой модели.

Я нахожусь в точке, где мне нужно знать, где находятся атрибуты вершин в шейдере, чтобы я мог передать их glVertexAttribPointer, однако glVertexAttribPointer принимает в качестве входных данных местоположение атрибута.Разные шейдеры могут иметь разные места для вершин.Есть ли способ запросить атрибуты в шейдере и сохранить их в списке в C ++?

Почтовый ответ: Я нашел следующий ответ , который объясняет это более подробно.

1 Ответ

0 голосов
/ 25 сентября 2018

Вы можете запросить атрибуты активного шейдера, используя glGetActiveAttrib.В сочетании с glGetAttribLocation вы можете создать такую ​​справочную таблицу.

Но даже с этой справочной таблицей вам придется использовать разные VAO для каждой комбинации сетки ишейдер.Я предлагаю вам пойти другим путем и определить, какое местоположение атрибута принадлежит какому атрибуту.Вы можете применить это с помощью glBindAttribLocation во время компиляции шейдера или использовать квалификаторы макета (layout(location = ...)) в шейдере.Используя это, вы сможете использовать один и тот же VAO со всеми вашими шейдерами.

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