Моего заказа QQuickItem в настоящее время выполняет следующиеЭффективного получения от QPaintDevice к QSGTexture в QQuickItem
- Создать QSGNode, что подкласс QSGSimpleTextureNode
- В функции узлов Preprocess, создать QOpenGLFramebufferObject привлечь к
- Нарисуйте объект QOpenGLFramebufferObject с помощью QPainter
- Отобразите содержимое объекта QOpenGLFramebufferObject как содержимое узла
Процесс, который у меня есть для преобразования FBO в QSGTexture, который я могу установить в QSGSimpleTextureNode, следующий.
QImage img = m_fbo->toImage();
QSGTexture* tex = m_window->createTextureFromImage(img, QQuickWindow::TextureCanUseAtlas);
setTexture(tex);
Это кажется очень неэффективно, и приложение начинает получать реальный framey даже при относительно разумных размеров кО.
Мои вопросы следующие.
- Есть ли более простой способ получить FBO в QSGTexture?
- Есть ли лучший совместимый с QPaintDevice элемент, который я должен использовать, а не QOpenGLFramebufferObject?
- Есть ли лучший подкласс, который я должен расширять, чем QSGSimpleTextureNode, чтобы делать то, что я хочу делать?
Спасибо!
Что касается QQuickPaintedItem, можете ли вы переопределить updatePaintNode для создания поддерева узла? – XenoByteZero
как я могу передать эту 'QSGTexture', созданную, наконец, на шаге 1 в' updatePaintNode'? Или, другими словами, как я могу отобразить эту 'QSGTexture' на моем QQuickItem? –