您可以使用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,其渲染目标是每个维度中窗口大小的倍数,最后在窗口中执行缩小比例。整个事情往往是缓慢的,并使用大量的内存,即使只有2倍。
您定位的GL版本是什么?累积缓冲区在GL 3.0中已弃用,并在3.1(不含'GL_ARB_compatibility')/ 3.2+ * Core *中删除。这就是为什么你不能在OS X或Intel的驱动程序上找到它们的原因。代替累积缓冲区,您是否考虑过将您的默认帧缓冲区的尺寸的整数倍乘以FBO,然后使用简单的'GL_LINEAR'过滤器进行下采样? –
嗨安东,谢谢你的回复。 – Fravadona
我正在考虑采用与古代现代OpenGL实现相兼容的方式,实现高质量场景消除锯齿(用于保存图像)的任何方法。 现在,我将在互联网上寻找任何“GLX FBO GL_LINEAR缩减采样”示例。 – Fravadona