Обратите внимание на 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 они действительно рисуются с использованием текстур.
Выглядит очень маловероятно. Из документов - за исключением того, что вместо рисования содержимого виджета с помощью QPainter и т. Д. Вы используете стандартные команды рендеринга OpenGL. – tathagata
@tathagata: к сожалению, вы ошибаетесь, несмотря на upvote; пожалуйста, прочитайте мой ответ на вопрос. –
Спасибо, Грег, за это! Я просто догадывался. Думаю, я был неправ. – tathagata