qt – QGLWidget和硬件加速?

所有问候,

简单的子类化QGLWidget并重新实现paintEvent()使用OpenGL和硬件加速?
我创建一个QPainter并在此paintEvent()中绘制QImages.

QGLWidget的paintEvent()方法中会发生什么?它是否将图像(QImage,QPixmap)转换为OpenGL纹理?

它是否使用硬件加速来进行图像缩放?

提前致谢,
umanga

看看 http://doc.qt.io/archives/4.6/opengl-2dpainting.html的一个有启发性的例子,您还可以在其中找到以下引用:“可以重新实现其[QGLWidget] paintEvent()并使用QPainter绘制设备,就像使用QWidget一样唯一的区别是,如果您的系统的OpenGL驱动程序支持,绘画操作将以硬件加速.“

所以,你第一个问题的答案是肯定的.

为了弄清楚实现的具体细节,我们来看一下来自QOpenGLPaintEngine的一个源代码(可以通过搜索互联网找到):

void QOpenGLPaintEngine::drawImage(const QRectF &r, const QImage &image, 
                              const QRectF &sr, Qt::ImageConversionFlags)
{
    Q_D(QOpenGLPaintEngine);
    if (d->composition_mode > QPainter::CompositionMode_Plus 
         || d->high_quality_antialiasing && !d->isFastRect(r))
        d->drawImageAsPath(r, image, sr);
    else {
        GLenum target = (QGLExtensions::glExtensions 
                         & QGLExtensions::TextureRectangle)
                        ? GL_TEXTURE_RECTANGLE_NV
                        : GL_TEXTURE_2D;
        if (r.size() != image.size())
            target = GL_TEXTURE_2D;
        d->flushDrawQueue();
        d->drawable.bindTexture(image, target);
        drawTextureRect(image.width(), image.height(), r, sr, target);
    }
}

这回答了您关于QImages的问题,他们确实是使用纹理绘制的.

相关文章
相关标签/搜索