Может ли GLSL использовать какие-либо другие структуры данных, такие как карта, очередь, стек? - PullRequest
0 голосов
/ 18 декабря 2018

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

Причина, по которой мне нужно, чтобы материал читался в шейдере с идентификатором материала, заключается в том, что я выполняю отложенный рендеринг и стараюсь не посылать текстуру для зеркальных, рассеянных и рассеянных цветов.Вместо этого я сохраняю идентификатор материала в альфа моей обычной текстуры и использую этот идентификатор, чтобы найти, какой материал должен использовать каждый фрагмент в расчете освещения Фонга.Проблема в том, что мне нужно пройтись по массиву материалов, чтобы проверить, совпадает ли идентификатор материала из массива с идентификатором материала из обычной текстуры, что не идеально.Я подумал, что если бы я мог сделать идентификатор материала ключом, необходимым для доступа к данным, это было бы немного более эффективно, поскольку мне не понадобился бы цикл, просто поиск.Я мог бы передать все материалы в правильном порядке и отправить их в свою программу освещения, но это означало бы, что я передаю в большем массиве, потому что есть 29 уникальных мешей, которые повторно используют материалы из массива из 7 материалов.Так что это означало бы, что я отправлю не менее 29 материалов вместо 7 *.

1 Ответ

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

вы можете передавать произвольные данные в OpenGL, чтобы вы могли отправить структуру с вашими данными, хранящимися в виде карты, и реализовать в своем шейдере способ ее получения.Но у вас не может быть шаблонного класса и рекурсии.Так что это будет намного проще, чем карта STL <>.Вы также не можете иметь указатели.Таким образом, за вашей картой будет просто массив const

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

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