summaryrefslogtreecommitdiffstats
path: root/src/imports/studio3d/q3dsstudio3drenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/studio3d/q3dsstudio3drenderer.cpp')
-rw-r--r--src/imports/studio3d/q3dsstudio3drenderer.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/imports/studio3d/q3dsstudio3drenderer.cpp b/src/imports/studio3d/q3dsstudio3drenderer.cpp
index 7ea2163..d0d1399 100644
--- a/src/imports/studio3d/q3dsstudio3drenderer.cpp
+++ b/src/imports/studio3d/q3dsstudio3drenderer.cpp
@@ -33,6 +33,7 @@
#include <private/q3dslayer3dsgnode_p.h>
#include <private/q3dsengine_p.h>
#include <private/q3dslogging_p.h>
+#include <private/qdragonrenderaspect_p.h>
#include <QQuickWindow>
#include <QOpenGLContext>
#include <QGuiApplication>
@@ -87,10 +88,16 @@ Q3DSStudio3DRenderer::Q3DSStudio3DRenderer(Q3DSStudio3DItem *item, Q3DSLayer3DSG
this, &Q3DSStudio3DRenderer::renderOffscreen, Qt::DirectConnection);
ContextSaver saver;
- m_renderAspect = new Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous);
- m_aspectEngine->registerAspect(m_renderAspect);
- m_renderAspectD = static_cast<Qt3DRender::QRenderAspectPrivate *>(Qt3DRender::QRenderAspectPrivate::get(m_renderAspect));
- m_renderAspectD->renderInitialize(ctx);
+ if (m_item->engine()->flags().testFlag(Q3DSEngine::AwakenTheDragon)) {
+ m_dragonRenderAspect = new Qt3DRender::Dragon::QDragonRenderAspect(Qt3DRender::Dragon::Renderer::Synchronous);
+ m_dragonRenderAspect->initialize(ctx);
+ m_aspectEngine->registerAspect(m_dragonRenderAspect);
+ } else {
+ m_renderAspect = new Qt3DRender::QRenderAspect(Qt3DRender::QRenderAspect::Synchronous);
+ m_aspectEngine->registerAspect(m_renderAspect);
+ m_renderAspectD = static_cast<Qt3DRender::QRenderAspectPrivate *>(Qt3DRender::QRenderAspectPrivate::get(m_renderAspect));
+ m_renderAspectD->renderInitialize(ctx);
+ }
QMetaObject::invokeMethod(m_item, "startEngine");
@@ -102,7 +109,9 @@ Q3DSStudio3DRenderer::~Q3DSStudio3DRenderer()
{
qCDebug(lcStudio3D, "[R] renderer %p dtor", this);
ContextSaver saver;
- m_renderAspectD->renderShutdown();
+
+ if (m_item->engine()->flags().testFlag(Q3DSEngine::AwakenTheDragon))
+ m_renderAspectD->renderShutdown();
}
void Q3DSStudio3DRenderer::invalidateItem()
@@ -148,7 +157,12 @@ void Q3DSStudio3DRenderer::renderOffscreen()
ContextSaver saver;
w->resetOpenGLState();
m_fbo->bind();
- m_renderAspectD->renderSynchronous();
+
+ if (m_item->engine()->flags().testFlag(Q3DSEngine::AwakenTheDragon))
+ m_currentFrame = m_dragonRenderAspect->renderSynchronous(std::move(m_currentFrame));
+ else
+ m_renderAspectD->renderSynchronous();
+
if (saver.context()->surface() != saver.surface())
saver.context()->makeCurrent(saver.surface());
w->resetOpenGLState();
@@ -156,6 +170,9 @@ void Q3DSStudio3DRenderer::renderOffscreen()
if (m_node) {
m_node->markDirty(QSGNode::DirtyMaterial);
} else {
+ if (m_item->engine()->flags().testFlag(Q3DSEngine::AwakenTheDragon))
+ qFatal("View3D is not yet supported in the Dragon render aspect.");
+
QSharedPointer<Qt3DRender::Render::ResourceAccessor> ra = m_renderAspectD->m_renderer->nodeManagers()->resourceAccessor();
if (ra) {
for (auto vd : m_viewDesc) {