Быстрая настройка содержимого буфера глубины в OpenGL ES 2.0 - PullRequest
1 голос
/ 30 сентября 2011

Я использую OpenTK, opengl ES 2.0 и хочу очистить буфер глубины до одного, загруженного извне для каждой перерисовки.

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

Как сделать это эффективным способом?

1 Ответ

1 голос
/ 03 октября 2011

gl_FragCoord является неизменным и GLES SL не поставляет gl_FragDepth.Поэтому невозможно установить глубину вывода фрагмента в шейдерном фрагменте.

В результате появляются две опции:

  • не использовать аппаратный буфер глубины
  • установка глубины в вершинном шейдере

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

Чтобы выполнить последнее, вы должны представить массив точек, по одной на фрагмент, сэмплировать текстуру глубины в вершинном шейдере и вывести соответствующую глубину.Если ваше оборудование не поддерживает выборку текстур в вершинных шейдерах, то вы можете сделать то же самое с процессором.Оставьте вычисленные в CPU фрагменты в VBO, и вам не придется платить столько же за кадром.

...