summaryrefslogtreecommitdiffstats
path: root/src/Authoring/Studio/Render/StudioRenderer.cpp
diff options
context:
space:
mode:
authorMäättä Antti <antti.maatta@qt.io>2018-07-25 09:52:04 +0300
committerAntti Määttä <antti.maatta@qt.io>2018-08-01 05:53:25 +0000
commit08587a77805ac33886b09a2919946002248460be (patch)
tree6d3418009f45054efd258d37fb2eac271f2daea4 /src/Authoring/Studio/Render/StudioRenderer.cpp
parent777046d35794802e5baf174b943926c7868d00e0 (diff)
Update window when subpresentations have been loaded
Task-number: QT3DS-2007 Change-Id: If50e5d644388f1eef538300e4efee371a284ffbb Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io> Reviewed-by: Jere Tuliniemi <jere.tuliniemi@qt.io> Reviewed-by: Antti Määttä <antti.maatta@qt.io>
Diffstat (limited to 'src/Authoring/Studio/Render/StudioRenderer.cpp')
-rw-r--r--src/Authoring/Studio/Render/StudioRenderer.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/Authoring/Studio/Render/StudioRenderer.cpp b/src/Authoring/Studio/Render/StudioRenderer.cpp
index 6689f867..928d504b 100644
--- a/src/Authoring/Studio/Render/StudioRenderer.cpp
+++ b/src/Authoring/Studio/Render/StudioRenderer.cpp
@@ -88,7 +88,8 @@ struct SRendererImpl : public IStudioRenderer,
public IReloadListener,
public CPresentationChangeListener,
public CSceneDragListener,
- public CToolbarChangeListener
+ public CToolbarChangeListener,
+ public IOffscreenRenderer::IOffscreenRendererCallback
{
typedef eastl::vector<Option<SEditCameraPersistentInformation>> TEditCameraInfoList;
std::shared_ptr<CWGLRenderContext> m_RenderContext;
@@ -115,6 +116,7 @@ struct SRendererImpl : public IStudioRenderer,
float m_pixelRatio;
QHash<QString, StudioSubPresentation> m_subpresentations;
QScopedPointer<Q3DSQmlStreamProxy> m_proxy;
+ QMap<QString, int> m_initialFrameMap;
SRendererImpl()
: m_Dispatch(*g_StudioApp.GetCore()->GetDispatch())
@@ -201,6 +203,7 @@ struct SRendererImpl : public IStudioRenderer,
offscreenMgr.RegisterOffscreenRenderer(
qt3ds::render::SOffscreenRendererKey(rid), *theOffscreenRenderer);
m_subpresentations[toRegister[i].m_id].renderer = theOffscreenRenderer;
+ theOffscreenRenderer->addCallback(this);
} else {
qt3ds::render::IOffscreenRenderer *theOffscreenRenderer =
QT3DS_NEW(m_Context->GetAllocator(),
@@ -210,9 +213,19 @@ struct SRendererImpl : public IStudioRenderer,
offscreenMgr.RegisterOffscreenRenderer(
qt3ds::render::SOffscreenRendererKey(rid), *theOffscreenRenderer);
m_subpresentations[toRegister[i].m_id].renderer = theOffscreenRenderer;
+ theOffscreenRenderer->addCallback(this);
}
m_subpresentations[toRegister[i].m_id].subpresentation = toRegister[i];
}
+ // Process qml proxy events so that we have initialized the qml producer,
+ // then get the desired environment to initialize the qml renderer.
+ QCoreApplication::processEvents();
+ for (int i = 0; i < toRegister.size(); ++i) {
+ QByteArray data = toRegister[i].m_id.toLocal8Bit();
+ if (toRegister[i].m_type == QLatin1String("presentation-qml"))
+ m_subpresentations[toRegister[i].m_id].renderer
+ ->GetDesiredEnvironment(QT3DSVec2(1.0f, 1.0f));
+ }
RequestRender();
}
@@ -235,7 +248,20 @@ struct SRendererImpl : public IStudioRenderer,
= m_Context->GetStringTable().RegisterStr(data.data());
offscreenMgr.ReleaseOffscreenRenderer(qt3ds::render::SOffscreenRendererKey(rid));
}
+ }
+
+ void onOffscreenRendererInitialized(const QString &id) override
+ {
+ // Request render after first frame rendered by the offscreen renderer
+ m_initialFrameMap[id] = 1;
+ }
+ void onOffscreenRendererFrame(const QString &id) override
+ {
+ if (m_initialFrameMap.contains(id)) {
+ RequestRender();
+ m_initialFrameMap.remove(id);
+ }
}
ITextRenderer *GetTextRenderer() override