OpenGL: буфер Depth Stencil не будет записывать вложенную текстуру - PullRequest
0 голосов
/ 20 февраля 2019

В настоящее время я разрабатываю эмулятор, и я получил несколько игр, использующих GL_DEPTH24_STENCIL8 (D24S8) в качестве буфера глубины.Буфер глубины работает нормально, и все, кроме базовой текстуры, похоже, не записывается.Я проверил все: написать маску, прикрепить Depth_Stencil и т. Д. Тем не менее, он не будет писать базовую текстуру.Это на самом деле интересно, потому что при рендеринге буфера глубины работает тест глубины, но не работает запись основной текстуры.NSight предполагает мою текстуру как бы 2 текстуры (вы можете видеть на рисунках), одна выделена для буфера глубины, который является правильным, а другая используется позже при выборке пиксельных шейдеров.По некоторым причинам это не будет писать это.Вещи, которые я проверял:

  • Framebuffer имеет текстуру, прикрепленную как вложенный шаблон глубины.
  • Запись глубины включена, когда она должна быть.
  • Копий нет, повторно загружает текстуру.
  • Маска трафарета установлена ​​правильно, все на удержании, но тест трафарета отключен.

Некоторая дополнительная информация:

  • Iиспользовал неизменяемое хранилище для выделения буфера глубины / трафарета.
  • Компоненты установлены в GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8

Что я пробовал:

  • Flushingпосле рисования и повторной загрузки не работало, текстура имела полные нули.
  • glCopyImageSubData для другого и использование другого, не работало
  • Изменение его на D32F также не работает, даже если NSightпоказывает, что делает, Renderdocs не делает.

State when drawing the buffer

Depth Buffer as seen in Nsight

The same depth buffer copy created by NSight when sampling later on a pixel shader

...