Я читал, что использование discard плохо влияет на производительность, потому что графический процессор не может принять окончательное значение глубины, а раннее Z-тестирование отключено. Но если я отключу запись глубины и продолжу тестирование глубины по сравнению с предыдущими проходами, останется ли это в силе, и использование discard по-прежнему отключит раннее Z-тестирование?





discard является проблемой производительности, потому что то, что происходит в отношении теста глубины, теперь определяется выполнением фрагментного шейдера, который может discard или не может discard какой-либо конкретный фрагмент. Следовательно, при тестировании глубины необходимо дождаться выполнения фрагментного шейдера.
Однако, если вы отключите запись глубины... это глобально (для этого вызова отрисовки). Для всех визуализируемых фрагментов будет списана глубина. Так что это не меняет отношения между FS и тестом глубины. Таким образом, проверка глубины может произойти до выполнения FS.
Теперь любые изменения состояния, связанные с рендерингом взаимодействия с буфером кадра, обходятся недешево. Они будут нести расходы при первом вызове розыгрыша после изменения. Но эта стоимость — это стоимость, которая происходит один раз: после изменения состояния. Это не затраты в отношении скорости вызовов отрисовки с использованием этого состояния. Думайте об изменении состояния как о скачке скорости в процессе рендеринга; как только вы минуете горб, дорога станет гладкой.
Спасибо за полную картину темы