OpenGL超级采样抗锯齿?

OpenGL超级采样抗锯齿?,opengl,glx,motif,Opengl,Glx,Motif,在office中,我们正在使用一个旧的GLX/Motif软件,该软件使用OpenGL的AccumerationBuffer来实现保存图像的抗锯齿。 我们的问题是,苹果从其所有驱动程序(从OS X 10.7.5开始)中删除了AccumerationBuffer,一些Linux驱动程序(如Intel HDxxxx)也不支持它 然后,我想更新软件的抗锯齿代码,使其与大多数实际的OSs和GPU兼容,同时保持生成的图像与以前一样漂亮(因为我们需要它们用于科学出版物) 超级采样似乎是最古老、质量最好的抗锯齿

在office中,我们正在使用一个旧的GLX/Motif软件,该软件使用OpenGL的AccumerationBuffer来实现保存图像的抗锯齿。 我们的问题是,苹果从其所有驱动程序(从OS X 10.7.5开始)中删除了AccumerationBuffer,一些Linux驱动程序(如Intel HDxxxx)也不支持它

然后,我想更新软件的抗锯齿代码,使其与大多数实际的OSs和GPU兼容,同时保持生成的图像与以前一样漂亮(因为我们需要它们用于科学出版物)


超级采样似乎是最古老、质量最好的抗锯齿方法,但我找不到任何不使用AccumerationBuffer的SSAA示例。使用OpenGL/GLX实现超级采样有不同的方法吗?

您可以使用FBO来实现最有可能用于累积缓冲区的相同类型的抗锯齿。过程几乎相同,只是使用纹理/渲染缓冲区作为“累积缓冲区”。可以为该过程使用两个FBO,也可以更改单个渲染FBO的附加渲染目标

在伪代码中,使用两个FBO,流大致如下所示:

create renderbuffer rbA
create fboA (will be used for accumulation)
bind fboA
attach rbA to fboA
clear

create texture texB
create fboB (will be used for rendering)
attach texB to fboB
(create and attach a renderbuffer for the depth buffer)

loop over jitter offsets
    bind fboB
    clear
    render scene, with jitter offset applied

    bind fboA
    bind texB for texturing
    set blend function GL_CONSTANT_ALPHA, GL_ONE
    set blend color 0.0, 0.0, 0.0, 1.0 / #passes
    enable blending
    render screen size quad with simple texture sampling shader
    disable blending
end loop

bind fboA as read_framebuffer
bind default framebuffer as draw framebuffer
blit framebuffer

完全超级采样也是可能的。正如上面评论中的Andon所建议的,创建一个FBO,其渲染目标在每个维度上都是窗口大小的倍数,最后对窗口执行向下缩放blit。整个过程往往很慢,占用大量内存,即使只有2倍。

您的目标是什么版本的GL?累积缓冲区在GL 3.0中被弃用,并在3.1中被删除(不兼容GL\u ARB\u)/3.2+核心。这就是为什么在OS X或Intel的驱动程序上找不到它们的原因。作为累积缓冲区的替代,您是否考虑过使用默认帧缓冲区维度的整数倍绘制FBO,然后稍后使用简单的
GL_LINEAR
过滤器执行下采样?您好,Andon,谢谢您的回复。我正在考虑任何可以实现高质量场景抗锯齿的方法(用于保存图像)以兼容古代和现代OpenGL实现的方式。现在我将在internet上查找任何“GLX FBO GL_线性下采样”示例。