您可以使用 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 倍。