Стоит ли сэмплер объектов дорого?
Этот вопрос немного вводит в заблуждение, поскольку типы данных sampler
в GLSL являются только непрозрачными дескрипторами которые ссылаются на текстурные единицы . Что дорого, так это фактическая операция отбора проб. Кроме того, количество текстурных блоков определенной стадии оттенка ограничено. Spe c гарантирует только 16. Поскольку вы не можете повторно использовать одну и ту же единицу для разных типов сэмплеров, это ограничит ваш MAX_LIGHTS
до 8 *.
Однако редко требуется массив сэмплеров. Вместо этого вы можете использовать массив текстур , который позволит вам хранить все ваши карты теней (для каждого типа текстуры) в одном текстурном объекте, и вам потребуется только один сэмплер.
Сказав все это, я все еще думаю, что ваш подсчет света совершенно нереалистичен c. Применение 128 карт теней в реальном времени не будет работать даже на самых быстрых графических процессорах ...
Если я правильно понимаю, я не должен объявлять сэмплер в единых блоках ,
Правильно.
Так я действительно вынужден циклически проходить все мои шейдеры и обновлять сэмплеры каждый раз, когда карты теней обновляются? Это пустая трата времени!
Нет. Униформы сэмплера необходимо обновлять только в том случае, если изменяется индекс единицы текстуры, из которой вы хотите произвести выборку из (что в идеале никогда). Не тогда, когда связана другая текстура, и не тогда, когда изменяется какое-либо содержимое текстуры.