質問

すべての挨拶、

qglwidgetをサブクラス化し、painteventを再実装します()openglとハードウェアの加速を使用しますか? Qpainterを作成し、このPaintEvent()でQimagesを描きます。

qglwidgetのpaintevent()メソッド内ではどうなりますか?画像(QIMAGE、QPIXMAP)をOpenGLテクスチャに変換しますか?

画像スケーリングにハードウェアアクセラレーションを使用していますか?

事前に、ウマンガ

役に立ちましたか?

解決

を見てみましょう http://doc.qt.io/archives/4.6/opengl-2dpainting.html 有益な例では、次の引用を見つけることができます。「[qglwidget] paintevent()を再実装し、qwidgetのようにqpainterを使用してデバイスに描画することができます。唯一の違いはです。システムの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に関するあなたの質問に答えます、それらは実際にテクスチャを使用して描かれています。

他のヒント

はい、qglwidget内のglコマンドをpaintgl、resizegl、およびinitializeglメソッド内で使用すると、完全なハードウェアアクセラレーションが得られます(利用可能な場合)。

また、qglwidgetでqpainterを使用すると、HWアクセラレーションも得られます。OpenGLQPainengineの実装があるため、それについて読むことができます。 ここ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top