Динамическое количество однородных блоков - PullRequest
3 голосов
/ 17 января 2011

Запуск openGL 3.1, вопрос прост.

На сайте GLSL вот как можно определить массив блоков однородного буфера:

uniform BlockName
{
  vec3 blockMember1, blockMember2;
  float blockMember3;
} multiBlocks[3];

Теперь, возможно ли иметь динамический номер этих мультиблоков? В GLSL нет указателей, поэтому нет «нового» выражения и т. Д.

Если нет, есть ли другой способ отправки динамического числа элементов? Мой блок в настоящее время упаковывает четыре поплавка и один vec2.

Я еще не написал шейдер, так что вы можете предложить что-нибудь, спасибо;)

Ответы [ 2 ]

1 голос
/ 18 января 2011

Хорошо, поэтому я написал также на форум openGL и это вышло

Итак, у вас есть три решения: Унифицированные буферные объекты или текстурные буферы или статический массив с большим количеством подготовленных элементов и использование другой униформы для указания фактического размера.

Последний может быть обновлен с помощью определения максимального размера OneSadCookie во время компиляции.

1 голос
/ 17 января 2011

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

Одной из возможных альтернатив будет создание блокамассивы членов:

#define BLOCK_COUNT %d

uniform BlockName
{
    vec3 blockMember1[BLOCK_COUNT];
    vec3 blockMember2[BLOCK_COUNT];
    float blockMember3[BLOCK_COUNT];
}
multiBlocks;

Затем вы можете изменить BLOCK_COUNT, чтобы изменить количество членов, и вы можете просто использовать динамические индексы:

multiBlocks.blockMember2[i];

Это все еще не позволяет вамизмените количество элементов без перекомпиляции шейдера.

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