OpenGL ES 2.0 Как сохранить буфер глубины нетронутым при последовательном рендеринге двух текстур в LibGDX?

1

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

Мне не интересно записывать упакованные значения глубины в цветную текстуру, я хочу сохранить существующий заполненный буфер глубины от первого рендеринга. Все в OpenGL ES 2.0 через LibGDX

Поэтому у меня есть FBO с буфером глубины.

  1. Я установил единственный разрешенный COLOR_ATTACHMENT0 в texA
  2. glCheckFramebufferStatus возвращает завершение
  3. Render с тестированием глубины (это дает значения, которые я ожидаю)
  4. Измените COLOR_ATTACHMENT0 FBO на texB
  5. glCheckFramebufferStatus возвращает завершение
  6. Render с глубинным тестированием (это ведет себя так, как если бы глубина с шага 3 не существовала)

Я полагаю, что мой запрос действительно меняет COLOR_ATTACHMENT, очищает буферы глубины? Если нет, у меня должна быть другая проблема где-то в моем коде :(

  • 0
    Содержимое буфера глубины должно сохраняться в этом сценарии, если вы явно не очистите его, используя вызов glClear() который включает GL_DEPTH_BUFFER_BIT .
  • 0
    Спасибо Рето. Я буду продолжать копаться в поисках своей ошибки. Даст вам знать, что я найду.
Теги:
libgdx
opengl-es-2.0
depth-buffer
fbo

1 ответ

1

Проблема была вызвана некоторым поведением libgdx, которого я не ожидал. Libgdx RenderContext выполнял этот вызов "Gdx.gl.glDisable(GL20.GL_DEPTH_TEST)";

Libgdx ModelBatch сам создает экземпляр libgdx RenderContext, если он не предоставляется. Когда begin вызывается в экземпляре ModelBatch, также вызывается в renderContext. Но только если пакет создал контекст сам. В начале RenderContext он отключает и отключает многие функции gl, включая проверку глубины.

Решение состоит в том, чтобы сделать экземпляр RenderContext и передать его на ваши модели. Затем оберните обе партии модели в начале вызова к контексту рендеринга. Помня о повторном включении теста глубины gl перед вызовом партий.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню