Date un'occhiata a http://doc.qt.io/archives/4.6/opengl-2dpainting.html per un esempio istruttivo, dove si possono anche trovare la seguente citazione: "è possibile re-implementare la sua paintEvent [QGLWidget]() e utilizzare QPainter per disegnare sul dispositivo, proprio come si con un QWidget. L'unica differenza è che le operazioni di disegno verranno accelerate nell'hardware se supportate dai driver OpenGL del sistema. "
Quindi, la risposta alla tua prima domanda è sì.
per capire i dettagli esatti di attuazione, diamo una rapida occhiata ad un pezzo di codice sorgente QOpenGLPaintEngine
(che può essere trovato cercando su Internet):
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);
}
}
Questo risponde alla tua domanda riguardo a QImages, sono effettivamente disegnati usando trame.
fonte
2010-07-01 12:46:51
Sembra molto improbabile. Dai documenti - eccetto che, invece di disegnare il contenuto del widget usando QPainter ecc., Usi i comandi di rendering OpenGL standard. – tathagata
@tathagata: sfortunatamente ti sbagli, nonostante l'upvote; per favore leggi la mia risposta alla domanda. –
Grazie Greg, per averlo fatto notare! Stavo solo facendo un'ipotesi logica. Credo di aver sbagliato. – tathagata