OpenGL:Depth模具缓冲区不会写入附加的底层纹理

时间 2019-02-21
阅读 46
点赞 0
收藏 0
连接fernando-andreas-sahmkow-beico

我目前正在开发一个模拟器,我得到了一些使用gl-depth24-stencil8(d24s8)作为深度缓冲的游戏。深度缓冲区工作得很好,除了底层的纹理之外,其他的都没有被写入。我检查过所有的东西:写模板,附件是深度模板,等等。但是它不会写下底层的纹理。它实际上很有趣,因为在渲染深度缓冲区时,深度测试有效,但不起作用的是写入底层纹理。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

尚无答案