Использование Texture1D вместо униформы - PullRequest
0 голосов
/ 03 февраля 2019

Я использую цветовую палитру из 5 цветов в своей игре, и каждый раз, когда я передаю каждый отдельный цвет как uniform vec3 в программу.Было бы более эффективно, если бы я использовал одномерную текстуру, которая содержит все 5 цветов (15 поплавков в текстуре)?

Это всего лишь одна из ситуаций, когда я хотел бы делать подобные вещи.Другой вариант - отправить все матрицы / переменные одновременно в шейдерную программу.Мне кажется немного неэффективным посылать каждую переменную, одну за раз, каждый раз, когда я хочу рендерить.Было бы лучше сгруппировать их все в одну текстуру и отправить их сразу?

Может быть, есть другой, еще более эффективный способ сделать то, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 03 февраля 2019

Было бы более эффективно, если бы я использовал одномерную текстуру, которая содержит все 5 цветов (15 текстур в поплавке)?

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

Может быть, есть другой, еще более эффективный способ сделать то, что я пытаюсь сделать?

Ну, если они всегда такие же, как вы говорите, просто поместите их как константы в шейдеры.

Это всего лишь одна из ситуаций, когда я хотел бы делать подобные вещи.Другой вариант - отправить все матрицы / переменные одновременно в шейдерную программу.Мне кажется немного неэффективным посылать каждую переменную, одну за раз, каждый раз, когда я хочу рендерить.Было бы лучше сгруппировать их все в одну текстуру и отправить их все сразу?

Изменение текстур не будет происходить быстрее, чем установка нескольких униформ.

Иесли вы собираетесь использовать свои матрицы для каждой вершины или фрагмента, то это вызовет много текстурных чтений.Это может фактически привести к значительному падению производительности, в зависимости от количества имеющихся у вас вершин / фрагментов / матриц.И даже если эти данные текстуры попадут в кэш текстуры L1, они все равно не будут превосходить равномерное чтение.

Если вы не хотите отправлять все переменные независимо, вы можете использовать объекты Uniform Buffer.

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