Pull to refresh
7
0
Данил Салахеев @Dananas

Программист

Send message
Если список шейдеров известен заранее, то их же можно грузить не в иговом цикле, а только один раз — при загрузке приложения.

Хорошее замечание :) Общие для всех 3d сцен шейдеры мы и правда компилируем как только получен GL контекст. Однако список сгенерированных шейдеров значительно больше, чем список используемых для конкретной 3d сцены.

Для рендера статики в 3d сценах мы используем static batching (описание в unity).

Заранее мы генерируем исходники шейдеров для всех 1..32 размеров массивов sampler2D. Какой именно параметр количества выбрать для «батчинга» зависит от количества текстур сцены T и от максимального числа uniform'ов доступных для устройства U. Тогда в рендере отдельной части сцены в худшем случае будут участвовать 2 шейдера одного типа. Один будет иметь массив из U сэмплеров, а второй из T % U. Поскольку сцены подгружаются в runtime, мы не можем подобрать оба параметра заранее, делаем это налету.

Information

Rating
Does not participate
Location
Россия
Registered
Activity