zeb*_*und 3 opengl textures framebuffer blit msaa
我有两个2D纹理.第一个是MSAA纹理,使用的是目标GL_TEXTURE_2D_MULTISAMPLE.第二个非MSAA纹理使用目标GL_TEXTURE_2D.
根据OpenGL 关于ARB_texture_multisample的规范,GL_NEAREST在绘制MSAA纹理时,只有一个有效的过滤选项.
在这种情况下,这两个纹理都GL_COLOR_ATTACHMENT0通过各自的Framebuffer对象附加.他们的分辨率也是相同的大小(根据我的知识,这对于将MSAA与非MSAA联系起来是必要的).
因此,考虑到当前的限制,如果我将MSAA保持FBO到非MSAA持有FBO,我仍然需要GL_NEAREST用作过滤选项,或者是否GL_LINEAR有效,因为两个纹理都已经被渲染到?
过滤选项仅在从纹理中进行采样时才会起作用.渲染到纹理时,它们不起任何作用.
从多重采样纹理采样时,GL_NEAREST确实是唯一支持的滤波器选项.您还需要sampler2DMS在GLSL代码中使用特殊的采样器类型(),并提供相应的采样指令.
我实际上在规范中找不到任何说法,将过滤器设置GL_LINEAR为多重采样纹理是一个错误.但是根本没有使用过滤器.从OpenGL 4.5规范(重点补充):
当在着色器中访问多重采样纹理时,访问采用一个整数向量来描述要获取的纹素以及与第14.3.1节中描述的样本编号相对应的整数,以确定要提取的纹素中的哪个样本.多重采样纹理目标上不允许使用标准采样指令,并且不会通过提取执行过滤.
对于多重采样和非多重采样纹理之间的blitting glBlitFramebuffer(),filter参数可以是GL_LINEAR或GL_NEAREST,但在这种情况下会被忽略.从4.5规格:
如果读取帧缓冲区是多重采样的(其SAMPLE_BUFFERS的有效值为1)且绘制帧缓冲区不是(其SAMPLE_BUFFERS的值为零),则对应于源中每个像素位置的样本在写入之前将转换为单个样本目的地.过滤器被忽略.
这是有道理的,因为在这种情况下有一个限制,源和目标矩形需要是相同的大小:
如果读取或绘制帧缓冲区被多重采样,并且提供给BlitFramebufferare的源矩形和目标矩形的尺寸不相同,则会生成INVALID_OPERATION错误.
由于仅在图像被拉伸时应用滤镜,因此在这种情况下无关紧要.
| 归档时间: |
|
| 查看次数: |
743 次 |
| 最近记录: |