我有两个二维纹理。第一种是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是否有效,因为这两种纹理都已呈现到?
发布于 2015-06-09 02:49:41
只有当您从样例中获得纹理时,筛选选项才会发挥作用。当您将呈现给纹理时,它们不起作用。
当从多样本纹理取样时,GL_NEAREST确实是唯一受支持的筛选器选项。您还需要在GLSL代码中使用特殊的取样器类型(sampler2DMS),并附带相应的采样指令。
实际上,我在规范中找不到任何东西,说为多样本纹理设置过滤器为GL_LINEAR是一个错误。但是过滤器根本不被使用。来自OpenGL 4.5规范(重点添加):
当在着色器中访问多样本纹理时,该访问采用一个整数向量,该向量描述要取哪个纹理,以及对应于第14.3.1节中描述的样本编号的整数,以确定要提取的纹理中的哪个样本。不允许对多样本纹理目标执行标准采样指令,而不允许通过提取来执行滤波。
对于使用glBlitFramebuffer()的多样本和非多样本纹理之间的闪烁,过滤器参数可以是GL_LINEAR或GL_NEAREST,但在这种情况下被忽略。来自4.5规范:
如果读取帧缓冲区是多采样的(其SAMPLE_BUFFERS的有效值为1)而绘制帧缓冲区不是(其值为SAMPLE_BUFFERS为0),则在写入目的地之前,将源中每个像素位置对应的样本转换为单个样本。滤波器被忽略。
这是有意义的,因为在这种情况下,源矩形和目标矩形需要大小相同的限制:
如果读取或绘制框架缓冲区是多采样的,并且提供给BlitFramebufferare的源矩形和目标矩形的尺寸不相同,则会生成一个BlitFramebufferare错误。
因为只有当图像被拉伸时才会应用过滤器,所以在这种情况下并不重要。
https://stackoverflow.com/questions/30720791
复制相似问题