Przechwytywanie bufora rysowania QML bez wyświetlania

Muszę pobrać każdą ramkę rysunkową QML (QtQuick 2) i wysłać ją przez sieć. W tej chwili użyłem metody wymienionej poniżej, ale ta metoda ma dwie duże wady

1) Z powodu dokumentacji Qt5 funkcja grabWindow () ma problemy z wydajnością

2) Nie może działać z ukrytym oknem QML

Czy można uzyskać bufor renderowania OpenGL zaraz po QQuickWindow :: afterRendering? Korzystasz z FBO? Udostępniony kontekst opengl?

class Grab: public QObject
{
 public:
 Grab( QQuickWindow * wnd ) : wnd_(wnd) {}

 public slots:

    void Grabme()
    {
       QImage image = wnd_->grabWindow();
    }

private:

QQuickWindow *wnd_;
};

int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);


QtQuick2ApplicationViewer viewer;
viewer.setMainQmlFile(QStringLiteral("qml/grab1/main.qml"));
viewer.showExpanded();

Grab grab( &viewer );
QObject::connect( &viewer, &QtQuick2ApplicationViewer::frameSwapped,
                  &grab, &Grab::Grabme, Qt::DirectConnection );


return app.exec();
}

questionAnswers(2)

yourAnswerToTheQuestion