0

以下は、QOpenGLWidget をサブクラス化する私のウィジェットのコードです。何が起こっているべきかというと、framebuffer オブジェクトが各フレーム間で白と黒の間で点滅しますが、表示されるのは白だけです。これは、一度レンダリングされてから更新されないことを示しています。

void GLWidget::paintEvent(QPaintEvent *event)
{
    QRect sourceRect(0, 0, 320, 240);
    QSize sourceSize = sourceRect.size();
    QOpenGLFramebufferObject sourceBuffer(sourceSize);
    sourceBuffer.bind();
    QOpenGLPaintDevice device(sourceSize);
    QPainter sourcePainter;
    sourcePainter.begin(&device);
    static bool flash = true;
    if (flash)
    {
        sourcePainter.fillRect(sourceRect, QBrush(Qt::white));
    }
    else
    {
        sourcePainter.fillRect(sourceRect, QBrush(Qt::black));
    }
    flash = !flash;
    sourcePainter.end();
    sourceBuffer.release();

    QPainter destinationPainter;
    destinationPainter.begin(this);
    destinationPainter.setRenderHint(QPainter::Antialiasing);
    destinationPainter.fillRect(event->rect(), QBrush(Qt::black));
    int destinationWidth = event->rect().width();
    int destinationHeight = event->rect().height();
    QImage sourceImage = sourceBuffer.toImage();
    //sourceImage.save(&process, "bmp");
    QImage scaledSourceImage = sourceImage.scaled(destinationWidth, destinationHeight, Qt::KeepAspectRatio);
    int translationX = destinationWidth - scaledSourceImage.width();
    int translationY = destinationHeight - scaledSourceImage.height();
    destinationPainter.translate(translationX / 2, translationY / 2);
    destinationPainter.drawImage(0, 0, scaledSourceImage);
    destinationPainter.end();
}

ここでフレームバッファ オブジェクトを正しく使用していますか? また、画面外に何かを描画して QOpenGLWidget に表示するより適切な方法はありますか?

4

0 に答える 0