小编Pou*_*rya的帖子

使用QOpenGLFrameBufferObject类进行Qt5 OpenGL多重采样

我需要在Qt5项目中执行多重采样,但我不确定如何使用QOpenGLFrameBufferObject来执行FSAA.对于如何为我搜索和文档只提到这样做就没有举例说:"如果你想使用一个帧缓冲区对象以作为纹理启用多重采样,你首先需要从它复制到使用QOpenGLContext常规帧缓冲区对象:: blitFramebuffer()."我的代码目前看起来像这样:

//Enable FSAA for better output
int vp[4];
glGetIntegerv(GL_VIEWPORT, vp);
if(m_lpFBO == NULL)
{
    //MultiSampling set to 4 now
    QOpenGLFramebufferObjectFormat format;
    format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
    format.setMipmap(true);
    format.setSamples(4);
    format.setTextureTarget(GL_TEXTURE_2D);
    format.setInternalTextureFormat(GL_RGBA32F_ARB);

    //Create the FBO
    m_lpFBO = new QOpenGLFramebufferObject(vp[2], vp[3], format);
    m_lpFBOSurface = new QGLFramebufferObjectSurface(m_lpFBO);
}

QRect rc(0, 0, vp[2], vp[3]);
QGLSubsurface sub(lpPainter->currentSurface(), rc);


m_lpFBO->bind();
sub.setFramebufferObject(m_lpFBO);
lpPainter->pushSurface(&sub);

//Draw as usual
.
. 
.

lpPainter->popSurface();


//Now Copy
QOpenGLFramebufferObject::blitFramebuffer(lpPainter->currentSurface()->framebufferObject(), rc, m_lpFBO, rc);
Run Code Online (Sandbox Code Playgroud)

opengl qt multisampling qt5

4
推荐指数
1
解决办法
3960
查看次数

标签 统计

multisampling ×1

opengl ×1

qt ×1

qt5 ×1