我可以将多重采样缓冲区用于除抗锯齿之外的其他内容吗?

时间:2015-09-17 19:12:40

标签: opengl directx shader transparency multisampling

我做了一些搜索,但我发现的唯一结果是反锯齿及其背后的机制。

我想将多样本缓冲区用于除抗锯齿之外的其他内容。具体来说,我想到的是一种与顺序无关的透明度,在每个样本中存储不同的颜色和深度值(理想情况下,最接近相机的N个片段)。

这首先是否可能?之前是否已经完成,如果是这样的话怎么办?即使它有可能,它是否比仅分配另一个N帧缓冲区更有内存效率?

如果像这样的东西需要一个计算着色器或OpenCL,那很好,我只是想知道它是否可能在第一时间。

此问题并非特定于OpenGL或DirectX,因为在任何一种情况下硬件都是相同的。

PS。请不要只指向其他与顺序无关的透明度方法,这个问题具体是关于多重采样缓冲区是否可以用于非典型手段。

1 个答案:

答案 0 :(得分:1)

最大的问题是系统是硬编码的,使用多重采样,多重采样,而不是存储任意数据。

通过使用gl_SampleMask output,您可以将片段着色器的结果定向到多重采样缓冲区的特定样本。然后,您可以使用着色器执行自定义多重采样解析,以便进行透明度排序或您计划在此处执行的任何操作。

理论上,当然。然而,在实践中,gl_SampleMask将在逻辑上与光栅化器为该片段计算的样本掩码一起使用。因此,如果您将gl_SampleMask设置为写入您的片段未涵盖的特定样本,则不会写入任何内容。

你无能为力。即使明确激活每样本片段着色器评估也无济于事,因为系统仍会根据您渲染的几何体计算和使用该蒙版。

所以一般来说,不,除了抗锯齿之外你不能使用多重采样。