QmlPuppet: Small optimization to rendering 2D content in 3D scene

There is no need to read back the texture into image when rendering
2D content for embedding into 3D scene, so don't do that.

Change-Id: If84619bdc20e6997733effc4745a496fab69e5b8
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2021-07-02 16:29:15 +03:00
parent 01a6e40377
commit 7c0652b7ac
3 changed files with 21 additions and 2 deletions

View File

@@ -800,8 +800,7 @@ void Qt5InformationNodeInstanceServer::doRender3DEditView()
#else
if (m_render2D) {
// Render 2D content, as it might be used by 3D content
grabWindow();
m_render2D = false;
m_render2D = !renderWindow();
}
renderImage = grabRenderControl(m_editView3DData);
#endif

View File

@@ -308,6 +308,25 @@ QImage Qt5NodeInstanceServer::grabRenderControl(RenderViewData &viewData)
return renderImage;
}
// This method simply renders the window without grabbing it
bool Qt5NodeInstanceServer::renderWindow()
{
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
if (!m_viewData.rootItem || (m_viewData.bufferDirty && !initRhi(m_viewData)))
return false;
m_viewData.renderControl->polishItems();
m_viewData.renderControl->beginFrame();
m_viewData.renderControl->sync();
m_viewData.renderControl->render();
m_viewData.renderControl->endFrame();
return true;
#else
Q_UNUSED(viewData)
#endif
return false;
}
QImage Qt5NodeInstanceServer::grabWindow()
{
if (m_viewData.rootItem)

View File

@@ -94,6 +94,7 @@ protected:
virtual bool initRhi(RenderViewData &viewData);
virtual QImage grabRenderControl(RenderViewData &viewData);
virtual bool renderWindow();
private:
RenderViewData m_viewData;