首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能在相同的抽签要求中,对我正在取样的深度纹理进行深度测试?

是否有可能在相同的抽签要求中,对我正在取样的深度纹理进行深度测试?
EN

Stack Overflow用户
提问于 2020-08-23 01:27:47
回答 1查看 123关注 0票数 1

上下文:

我使用的是延迟渲染设置,在第一阶段,我有两个FBO:一个是GBuffer,用于存储所有可见片段的法线、反照率和材料信息。此FBO有32位深度纹理.在计算任何照明之前,这会在几何通道中被画入其中。

第二个FBO是纯颜色的,从黑色开始,但是在几个通道上积累了照明,从GBuffer的采光着色器开始,然后使用加性混合写到只有颜色的缓冲器中。

问题是,我真的很想利用早期的深度测试来让我的照明只计算包含实际几何(不仅仅是天空)的碎片。我能想到的最好的方法就是用深度测试来测试任何在阳光下深度为1的像素,或者让位于测点光影响范围后面的像素失效。但是,我认为我不能把这个深度纹理绑定到我的彩色FBO,因为我也从它里面的照明着色器内取样,以计算碎片在世界空间中的位置。

因此,我的问题是:是否有一种方法可以使用相同的深度纹理进行早期深度测试,以及在阴影内部取样?或者,如果没有,是否还有其他(合理的)方法来拒绝不包含几何的像素?我不会在我的灯光通道中写到这个深度的纹理。

我只需要针对PC上的现代图形硬件(这样我就可以使用任何常见的扩展,或者openGL 4.6功能)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-23 02:18:23

在OpenGL中有一些关于读取着色器中的数据的规则,这些数据也由于一个框架缓冲区操作而被更新。那些规则过去是相当严格的。实际上,预GL4.4,您要做的规则是实际上是未定义的行为。也就是说,如果将来自纹理的图像附加到呈现FBO,并且您从该纹理中获取一个样本,使从附加的图像中读取是完全可能的,您就得到了未定义的行为。没关系,如果您的写掩码意味着没有发生任何书写;它是UB。

幸运的是,它现在已经有了明确的定义。只有在实际编写的时候才能得到UB,而不仅仅是因为您有一个附加到FBO的图像。所谓“现在”,我指的基本上是过去10年制造的任何硬件。虽然障碍和GL4.5是最近才出现的,但它们的前身NV_texture_barrier实际上已经很老了。尽管是NVIDIA的名字扩展,但如此广泛地实施才是甚至可以在MacOS实现上使用

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63542591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档