在默认帧缓冲区上绘制一个透明帧缓冲区

Draw a transparent framebuffer onto the default framebuffer

我遇到这种情况,需要将帧缓冲区对象的内容渲染到屏幕上。屏幕上已经有一些内容,我想将我的帧缓冲区的内容绘制到该内容上。

我正在使用 Qt5 和 QNanoPainter 来实现它。

我实现的渲染命令基本上采用 QOpenGLFramebufferObject 并将其转换为 QNanoImage(使用 this) and then calls QNanoPainter::drawImage.

这工作正常,但问题是当 fbo 的内容呈现到屏幕上时,屏幕上先前存在的内容变得“像素化”。 因此,例如,在我绘制 FBO 之前,屏幕看起来像这样

然后当我将 FBO 绘制到默认渲染目标上时,我得到了这个(红色是 FBO 的内容)

我认为这与混合和 OpenGL 有关,但我不确定如何解决这个问题。

当您多次在其自身上过度绘制半透明图像时会发生这种情况。白色像素变得更白,蓝色像素变得更蓝,因此,抗锯齿边缘在几次迭代后消失。

因此我推断您的 'transparent framebuffer' 已经包含蓝线和黑网格线。因此,解决方案是在继续将红线绘制到 in.

之前清除 'transparent framebuffer'