glDepthMask (GL_FALSE) очищает буфер кадра на некоторых графических процессорах - PullRequest
6 голосов
/ 02 марта 2011

Иногда я отключаю запись в буфер глубины с помощью glDepthMask(GL_FALSE) во время рендеринга кадра. Это отлично работает на некоторых графических процессорах (например, PowerVR Motorola Droid), но на HTC EVO с графическим процессором Adreno, например, я получаю полный буфер мусора (я вижу следы ячеек, которые я где-то рендерил, но весь экран в основном разбит).

Если я заставляю glDepthMask быть истинным все время, все работает нормально.

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

Ответы [ 3 ]

6 голосов
/ 18 марта 2011

Проблема заключалась в том, что glDepthMask должно быть истинно при вызове glClearDepth. Очевидно, это относится только к графическим процессорам Adreno, а не к графическим процессорам PowerVR.

1 голос
/ 02 марта 2011

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

В любом случае, надеюсь, что это поможет каким-то небольшим образом.

0 голосов
/ 11 июня 2013

iPhone4 / iOS Симулятор. Если я не установлю для glDepthMask значение true перед glClear, мой рендеринг будет сброшен. Я потратил два дня на решение этой проблемы: выгрузил фрейм-буферы на диск, исследовал трассировку всего фрейма, вошел в код ... Это было единственное, что сработало.

NEVERMIND. Я тупой. Я выполнял glClear (COLOR | DEPTH) с маской глубины = false, поэтому буфер глубины вообще не очищался. Мой первый ответ был вызван целым днем ​​отладки: /

...