2015-11-01 2 views
-2

Что происходит быстрее в WebGL?WebGL: что быстрее?

раз: создать 1000 шейдеров для 1000 объектов и установить форму для них

каждого кадр: связываемых шейдерами при отрисовке их

Или

раз: создать 10 шейдеров для 1000 объектов

каждый кадр: bind shaders + обновление униформы в соответствии с объектами?

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

+2

Скорее всего второй вариант. Изменение шейдеров (в большинстве случаев) - очень дорогостоящая операция. – BDL

ответ

1

Полезно помнить, что Graphics Pipeline - это фактический конвейер, обычно реализованный в аппаратном обеспечении. Вы можете сконфигурировать конвейер, назначив шейдеры и установив форму, а затем вы активируете конвейер (путем вызова drawElements или одного из его друзей). Это по существу загружает груду входных данных в начало конвейера и запускает процесс, который является очень параллельным. Например, в середине прогона некоторые ранние вершины будут проходить через вершинный шейдер и растеризатор, а результирующие фрагменты будут затенены, тогда как другие вершины все еще вернутся к стадии шейдера вершин. Различные разделы трубопровода все делают свое дело с данными, проходящими мимо.

После того, как вы начнете этот процесс, ЦП может свободно выполнять другие операции во время работы конвейера. Но если вы хотите перенастроить конвейер, например, изменив шейдеры или изменяя униформу, CPU заблокирует ваш поток и дождитесь завершения полного конвейера до последнего пикселя.

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

Pipeline image courtesy OpenGLInsights.com

1

Изменение шейдеров дорого (это недействительно кэширование команд), обновление униформ дешево (оно просто обновляет значения в файле регистров).

Смежные вопросы