独立渲染到多重采样缓冲区和已解析的帧缓冲区

时间:2013-06-05 15:07:15

标签: ios objective-c opengl-es opengl-es-2.0

所以我正在使用GL_LINE_STRIP进行一些图形绘制,我正在使用多重采样缓冲区,因此线条看起来不那么锯齿状。问题是我在图表的背景中有一些线作为传奇。线条向上的多重采样类型导致它们只有1个像素的厚度,但由于多重采样,有时会将线条分布在比原始颜色略微暗的2个像素上,使得线条看起来不同于彼此。

是否可以将这些图例线直接渲染到已解析的帧缓冲区,然后将多重采样的内容绘制在顶部?这实际上不会对背景图例线进行多重采样,而是对图形线进行多重采样。

这可能吗?在我深入了解之前我想知道,后来发现你不能这样做。如果你有一些演示代码向我展示那也很棒

1 个答案:

答案 0 :(得分:1)

如果图例最后一个会更容易:您可以将MSAA缓冲区解析为视图帧缓冲区,然后通常将图例渲染到已解析的缓冲区中。但另一种方式是不可能的,因为多重采样分辨率只会覆盖目标帧缓冲区的任何先前内容,它不会进行任何混合或深度测试。

实际渲染MSAA内容的唯一方法是首先将它们解析为另一个FBO并在图例顶部绘制FBO的纹理。但是对于没有被完全覆盖的图例,你将不得不使用alpha混合。因此,在渲染之前,您基本上将MSAA缓冲区清除为0的alpha,然后将图形渲染到其中。然后解析这些缓冲区并在图例顶部绘制生成的纹理,使用alpha混合仅覆盖实际绘制图形的部分。