首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线性滤波能用于MSAA纹理的FBO blit到非MSAA纹理吗?

线性滤波能用于MSAA纹理的FBO blit到非MSAA纹理吗?
EN

Stack Overflow用户
提问于 2015-06-08 23:42:26
回答 1查看 1.3K关注 0票数 4

我有两个二维纹理。第一种是MSAA纹理,它使用GL_TEXTURE_2D_MULTISAMPLE的目标。第二种是非MSAA纹理,它使用GL_TEXTURE_2D的目标。

根据OpenGL的多样本,当MSAA纹理被绘制到时,只有GL_NEAREST是一个有效的过滤选项。

在这种情况下,这两个纹理通过各自的Framebuffer对象附加到GL_COLOR_ATTACHMENT0。他们的决议也是相同的大小(据我所知,这是必要的,当把一个MSAA到非MSAA)。

因此,在当前的约束条件下,如果我将MSAA混合到非MSAA,是否仍然需要使用GL_NEAREST作为筛选选项,或者GL_LINEAR是否有效,因为这两种纹理都已呈现到?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-09 02:49:41

只有当您从样例中获得纹理时,筛选选项才会发挥作用。当您将呈现给纹理时,它们不起作用。

当从多样本纹理取样时,GL_NEAREST确实是唯一受支持的筛选器选项。您还需要在GLSL代码中使用特殊的取样器类型(sampler2DMS),并附带相应的采样指令。

实际上,我在规范中找不到任何东西,说为多样本纹理设置过滤器为GL_LINEAR是一个错误。但是过滤器根本不被使用。来自OpenGL 4.5规范(重点添加):

当在着色器中访问多样本纹理时,该访问采用一个整数向量,该向量描述要取哪个纹理,以及对应于第14.3.1节中描述的样本编号的整数,以确定要提取的纹理中的哪个样本。不允许对多样本纹理目标执行标准采样指令,而不允许通过提取来执行滤波。

对于使用glBlitFramebuffer()的多样本和非多样本纹理之间的闪烁,过滤器参数可以是GL_LINEARGL_NEAREST,但在这种情况下被忽略。来自4.5规范:

如果读取帧缓冲区是多采样的(其SAMPLE_BUFFERS的有效值为1)而绘制帧缓冲区不是(其值为SAMPLE_BUFFERS为0),则在写入目的地之前,将源中每个像素位置对应的样本转换为单个样本。滤波器被忽略

这是有意义的,因为在这种情况下,源矩形和目标矩形需要大小相同的限制:

如果读取或绘制框架缓冲区是多采样的,并且提供给BlitFramebufferare的源矩形和目标矩形的尺寸不相同,则会生成一个BlitFramebufferare错误。

因为只有当图像被拉伸时才会应用过滤器,所以在这种情况下并不重要。

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

https://stackoverflow.com/questions/30720791

复制
相关文章

相似问题

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