QT 使用OpenGL在OpenGL ES3.0设备上的离屏渲染问题

reme 发布于 2016/05/17 18:33
阅读 1K+
收藏 0

各位江湖豪杰,在下遇到一个问题搞了几天没解决,不知哪位仁兄是否处理过这个问题。问题如下,我使用QT-OpenGL来做离屏渲染,实质就是把内容渲染到QOpenGLFrameBufferObject上,然后通过ToImage取出来,主要代码如下:


 QOpenGLContext m_pCtx = new QOpenGLContext;
    QSurfaceFormat surfaceFmt;
    if(QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL)
    {
        surfaceFmt.setRenderableType(QSurfaceFormat::OpenGL);
    }
    else
    {
        surfaceFmt.setRenderableType(QSurfaceFormat::OpenGLES);
        //surfaceFmt.setVersion(3,0);
    }
    m_pCtx->setFormat(surfaceFmt);
    bool b = m_pCtx->create();
	
    QOffscreenSurface pSurface = new QOffscreenSurface;
    pSurface->setFormat(surfaceFmt);
    pSurface->create();
	
	m_pCtx->makeCurrent(pSurface);

    QOpenGLPaintDevice glDevice(800, 600);
    QPainter painter;
    bool b = painter.begin(&glDevice);

    QOpenGLFramebufferObjectFormat fboFormat;
    fboFormat.setSamples(16);
    fboFormat.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil);
    QSize fboSize(800, 600);
    QOpenGLFramebufferObject* m_pFBO = new QOpenGLFramebufferObject(fboSize, fboFormat);
    bool  bValid = m_pFBO->isValid();

    m_pFBO->bind();

    painter.drawLine(-200,-200,200,200);
    painter.end();

    QImage m_Image = m_pFBO->toImage();



这段代码在桌面平台(win和linux)以及Android 4.0设备上是正常的,得到的Image中有绘制的内容,但是在安卓4.4及以上版本就是空白,即没有绘制出内容。我现在认为是QT在OpenGLES3.0环境下的绘制问题,不知道哪位大侠处理过类似的问题没?至于QT/Android的源码在下也尝试编译过,奈何还未编译成功。

加载中
返回顶部
顶部