Включение быстрой очистки Z в OpenGL

Я обнаружил, что мне нужно очищать буфер глубины много раз за кадр для многоуровневой рендеринг.

В начале 2000-х очистка Z была на самом деле довольно дорогостоящей из-за ограниченной пропускной способности в тот день. Поэтому AMD придумала такие методы, как HyperZ, которые включали быструю Z-очистку операция для буфера глубины.

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

Или есть расширение OpenGL, о котором я должен знать, или параметр, который мне нужно где-то переключить?

Между прочим, моя цель - OpenGL Core Profile 3.2.


person Bram    schedule 26.08.2020    source источник


Ответы (1)


Не зная больше о том, что вы пытаетесь сделать, я не могу быть уверен в лучшем решении вашей проблемы. Однако есть основная функция профиля, которая может предоставить то, что вам нужно: glClearBuffer.

float far_value = 1.0f;
glClearBufferfv(GL_DEPTH, 0, & far_value);

Это эффективно очищает буфер глубины, устанавливая максимальное значение глубины. Теперь возможно, что вы захотите нарисовать фрагменты, которые также имеют максимальную глубину. glDepthFunc(GL_LEQUAL) будет полезен в этом случае. GL_LESS - начальное значение по умолчанию.

person Brett Hale    schedule 27.08.2020