Spójrz na http://doc.qt.io/archives/4.6/opengl-2dpainting.html dla pouczającego przykładu, gdzie można również znaleźć następujący cytat: "możliwe jest ponowne wdrożenie jego [QGLWidget] paintEvent() i użycie QPaintera do rysowania na urządzeniu, tak jak Ty przy użyciu QWidget, jedyną różnicą jest to, że operacje malowania zostaną przyspieszone w sprzęcie, jeśli jest on obsługiwany przez sterowniki OpenGL systemu. "
Odpowiedź na pierwsze pytanie brzmi: tak.
Aby dowiedzieć się dokładnych szczegółów implementacji, rzućmy szybko okiem na kawałek kodu źródłowego z QOpenGLPaintEngine
(które można znaleźć, wyszukując w Internecie):
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);
}
}
ta odpowiada na pytanie dotyczące QImages, są one rzeczywiście rysowane za pomocą tekstur.
Wygląda bardzo nieprawdopodobnie. Z dokumentów - z tym wyjątkiem, że zamiast rysować zawartość widżetu za pomocą QPaintera itp. Używasz standardowych poleceń renderowania OpenGL. – tathagata
@tathagata: niestety się mylicie, pomimo przegranych; przeczytaj moją odpowiedź na pytanie. –
Dzięki Greg, za wskazanie tego! Po prostu logicznie się domyślałem. Chyba się myliłem. – tathagata