diff options
Diffstat (limited to 'src/imports/studio3d/q3dsstudio3drenderer.cpp')
-rw-r--r-- | src/imports/studio3d/q3dsstudio3drenderer.cpp | 29 |
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) { |