OpenGL GL_DEPTH_TEST против glDepthFunc и glDepthMask?
Я использую glDisable(GL_DEPTH_TEST)
отключить тестирование глубины, думая, что отключает только "тестирование глубины". Думаю, причина, по которой я запутался, заключается в том, что я создал две функции: одну для отключения "проверки" глубины, а другую для отключения "записи" глубины с помощью glDepthMask(GL_FALSE);
Если отключить GL_DEPTH_TEST
отключает как "тестирование", так и "запись", тогда это будет эквивалентно выполнению:
glDepthFunc(GL_ALWAYS); // DISABLE TESTS (OR ACTUALLY ALWAYS LET THE TEST SUCCEED)
glDepthMask(GL_FALSE); // DISABLE WRITES
Я думаю, что нет смысла отключать GL_DEPTH_TEST
если я не хочу отключить оба теста и записи, и мне интересно, какой из них лучше. Формулировка кажется запутанной, но, возможно, это только я. Я предполагаю делать отключение тестов глубины с glDepthFun(GL_ALWAYS)
все равно будет делать сравнение, я полагаю, что нет способа полностью отключить тест глубины, в то же время разрешая запись?
1 ответ
glDisable(GL_DEPTH_TEST)
отключает тест глубины от трубопровода. Если вы используете:
glDepthFunc(GL_ALWAYS);
glDepthMask(GL_FALSE);
вместо этого он просто скрывает его после условия (но все еще присутствует в конвейере), что может означать разницу в производительности на некоторых платформах...
Также при использовании вашего эквивалента вам потребуется установить / запомнить оригинал DepthFunc
в случае, если вы хотите включить его снова (так как есть много методов рендеринга, которые должны переключить DeptTest
вкл / выкл несколько раз.
И, наконец, два вызова функций GL больше, чем один. Так что с точки зрения производительности с помощью glDisable(GL_DEPTH_TEST)
лучше для этого. glDepthFunc,glDepthMask
предназначены для различных целей, таких как многопроходный рендеринг, независимая от порядка прозрачность, дырки и т. д.