2014-08-31 5 views
1

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

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

Итак, у меня есть FBO с буфером глубины.

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

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

+0

Содержимое буфера глубины должно сохраняться в этом сценарии, если вы явно не очистите его, используя вызов 'glClear(), который включает в себя' GL_DEPTH_BUFFER_BIT'. –

+0

Спасибо Reto. Я буду рыть свою ошибку. Дадут вам знать, что я нахожу. – Bucket

ответ

1

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

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

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