Можно ли использовать разные объекты Vertex Array с одной и той же шейдерной программой? - PullRequest
0 голосов
/ 08 января 2019

Я собирался визуализировать призмы и сферы, и оба использовали одни и те же шейдеры, только разные буферы для своих данных (положения вершин и нормали).

Можно ли скомпилировать только одну шейдерную программу и использовать разные VAO для каждого типа объектов?

Кроме того, оба моих типа объектов используют разные местоположения атрибутов, а сфера также использует буфер массива элементов, это вызовет какие-либо проблемы?

1 Ответ

0 голосов
/ 08 января 2019

Можно ли скомпилировать только одну шейдерную программу и использовать разные VAO для каждого типа объектов?

Нет прямой связи между программным объектом shader и объектом массива вершин .
Когда выполняется вызов отрисовки, атрибуты вершин, которые определены текущим связанным объектом массива вершин, отрисовываются с использованием установленной в данный момент программы. Так что да, вы можете использовать одну и ту же шейдерную программу для рисования разного набора вершин, на которые ссылаются разные объекты массива вершин.

[...] оба моих типа объектов используют разные местоположения атрибутов [...]

Атрибут index (location) является активным программным ресурсом и не может быть изменен после связывания шейдерной программы.
Спецификация атрибута вершины (хранящаяся в объекте массива вершин) должна учитывать индексы активных атрибутов программы, но несколько объектов массива вершин могут ссылаться на один и тот же объект (ы) буфера массива вершин.
Можно создавать разные объекты массива вершин, которые ссылаются (совместно используют) на один и тот же объект (ы) буфера вершин, но связывают их с различными местоположениями атрибутов. Но обратите внимание, расположение атрибутов шейдерной программы не может быть изменено.

[...] сфера также использует буфер массива элементов, это вызовет какие-либо проблемы?

Используется ли индексный (элементный) буфер для рисования сетки, зависит от вызова отрисовки (glDrawArrays или glDrawElements)

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