В opengl ES я могу использовать буфер массива буферов вершин и т. Д. Для общих матриц шейдеров? - PullRequest
0 голосов
/ 11 декабря 2018

Поскольку OpenGL ES не поддерживает общие "единообразные блоки", мне было интересно, есть ли способ, которым я могу поместить матрицы, на которые могут ссылаться несколько различных шейдеров, простым примером будет worldToViewport или worldToEye, который не изменитсядля всего кадра и на который ссылаются все шейдеры.Я видел один пост, в котором 3 или 4 точечных вызова в вершине используются для преобразования ее из 4 «векторов столбцов», но мне интересно, есть ли способ назначить данные буфера для «mat4» в шейдере.

Ах, да, для этого нужен webGL, который на данный момент поддерживает только openGLES 2.0.

Интересно, поддерживает ли он индексированные буферы атрибутов, поскольку я предполагаю, что они не должны быть какого-либо определенного размера относительно размера массива вершин позиции.

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

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

1 Ответ

0 голосов
/ 11 декабря 2018

Атрибуты вершин являются отдельными для каждой вершины, поэтому нет способа разделять атрибуты вершин между несколькими вершинами.

OpenGL ES 2.0 и выше имеет униформу на стороне ЦП, которая должна быть выгружена отдельно от ЦП во время отрисовки.Униформы принадлежат программному объекту, поэтому для униформ, которые являются постоянными для фрейма, вам нужно модифицировать каждую программу только один раз, поэтому стоимость не обязательно пропорциональна количеству отрисовки.Объекты (UBO), которые позволяют загружать униформу из буфера в памяти.

Я не уверен, что вы подразумеваете под "не поддерживает общие унифицированные блоки", поскольку это почти то же самое, что UBO, хотя оно не будет работать на старом оборудовании, которое поддерживает только OpenGL ES 2.х.

...