首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在多样本纹理中渲染颜色和深度?

如何在多样本纹理中渲染颜色和深度?
EN

Stack Overflow用户
提问于 2015-05-24 20:22:00
回答 1查看 2.5K关注 0票数 3

为了实现“深度剥离”,我将我的OpenGL场景渲染到一系列帧缓冲区中,每个帧缓冲区都配备了rgba颜色纹理和深度纹理。这个很好用如果我不关心反混叠。如果我这样做了,那么正确的做法似乎是启用GL_MULTISAMPLING并使用GL_TEXTURE_2D_MULTISAMPLE而不是GL_TEXTURE_2D。但我搞不懂还有哪些电话需要更换。

特别是,我应该如何调整我的框架缓冲区结构,使其使用glTexImage2DMultisample而不是glTexImage2D

我是否需要改变对glFramebufferTexture2D的调用,而不是使用GL_TEXTURE_2D_MULTISAMPLE而不是GL_TEXTURE_2D

如果我将颜色和深度渲染成纹理,是否需要调用glRenderbufferStorageMultisample

最后,除了设置框架缓冲区要呈现的纹理之外,还有什么glBlit*需要做吗?

关于这个主题,有很多相关的问题,但我发现的解决方案中,没有一个似乎指向一个规范的教程或明确的例子将所有这些组合在一起。

EN

回答 1

Stack Overflow用户

发布于 2015-05-25 18:16:50

虽然我只使用多采样FBO渲染与渲染缓冲区,而不是纹理,以下是我的理解。

我是否需要改变对glFramebufferTexture2D的调用,而不是使用GL_TEXTURE_2D_MULTISAMPLE而不是GL_TEXTURE_2D

不,这就是你所需要的。使用glTexImage2DMultisample()创建纹理,然后使用GL_TEXTURE_2D_MULTISAMPLE作为第三个参数附加到glFramebufferTexture2D()。唯一的限制是,级别(第5个参数)必须为0。

如果我将颜色和深度渲染成纹理,是否需要调用glRenderbufferStorageMultisample

是。如果将深度缓冲区附加到相同的FBO,则需要使用多采样呈现缓冲区,并将相同数量的示例作为颜色缓冲区。因此,您可以使用glRenderbufferStorageMultisample()创建深度呈现缓冲区,传递用于颜色缓冲区的相同的示例计数。

最后,除了设置框架缓冲区要呈现的纹理之外,还有什么glBlit*需要做吗?

不适用于渲染到框架缓冲区。一旦您完成了渲染,您就有了几个选项:

  1. 您可以将多样本纹理降采样(解析)为规则纹理,然后将规则纹理用于后续呈现。为了解析多样本纹理,可以使用glBlitFramebuffer(),其中多样本纹理附加到GL_READ_FRAMEBUFFER,规则纹理附加到GL_DRAW_FRAMEBUFFER
  2. 您可以使用多样本纹理进行后续呈现。您将需要使用sampler2DMS类型的采样器在您的着色器代码,与相应的抽样功能。

对于选项1,我认为使用多样本纹理并不是很好的理由。您还可以使用一个多示例呈现缓冲区,它稍微容易使用,并且至少应该具有同样的效率。为此,您为颜色附件创建一个呈现缓冲区,并将其分配给glRenderbufferStorageMultisample(),非常类似于深度缓冲区所需的内容。

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

https://stackoverflow.com/questions/30427944

复制
相关文章

相似问题

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