OpenGL:深度模板缓冲区不会写入附加的基础纹理

时间:2019-02-20 17:39:35

标签: c++ opengl emulation

我目前正在开发模拟器,并且使用GL_DEPTH24_STENCIL8(D24S8)作为深度缓冲区获得了一些游戏。深度缓冲区可以正常工作,除了基本纹理以外的所有纹理似乎都没有写入。我检查了所有内容:编写蒙版,附件为Depth_Stencil等。它仍然不会编写基础纹理。实际上,这很有趣,因为在渲染深度缓冲区时,深度测试有效,而编写底层纹理无效。 NSight假定我的纹理是2个纹理(您可以在图片中看到),一个分配给正确的深度缓冲区,另一个分配给以后在像素着色器采样中使用的纹理。由于某种原因,它不会写它。我检查过的事情:

  • 帧缓冲区具有作为深度模板附件附加的纹理。
  • 深度写入应在应有的时间开启。
  • 没有副本,纹理没有重新上传。
  • 模板遮罩设置正确,保留所有功能,但模板测试已禁用。

一些额外的信息:

  • 我使用不可变存储来分配深度/模板缓冲区。
  • 组件设置为GL_DEPTH24_STENCIL8,GL_DEPTH_STENCIL,GL_UNSIGNED_INT_24_8

我尝试过的事情:

  • 绘制并重新上传后冲洗,不起作用,纹理具有全零。
  • 将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

0 个答案:

没有答案