// Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB). // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "scene_p.h" #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE namespace Qt3DRender { namespace Render { using namespace Qt3DCore; Scene::Scene() : BackendNode(QBackendNode::ReadWrite) , m_sceneManager(nullptr) { } void Scene::cleanup() { m_source.clear(); } void Scene::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { const QSceneLoader *node = qobject_cast(frontEnd); if (!node) return; BackendNode::syncFromFrontEnd(frontEnd, firstTime); if (node->source() != m_source) { m_source = node->source(); if (m_source.isEmpty() || Qt3DCore::QDownloadHelperService::isLocal(m_source)) m_sceneManager->addSceneData(m_source, peerId()); else m_sceneManager->startSceneDownload(m_source, peerId()); const auto d = static_cast(Qt3DCore::QNodePrivate::get(node)); const_cast(d)->setStatus(QSceneLoader::Loading); } markDirty(AbstractRenderer::AllDirty); } QUrl Scene::source() const { return m_source; } void Scene::setSceneManager(SceneManager *manager) { if (m_sceneManager != manager) m_sceneManager = manager; } RenderSceneFunctor::RenderSceneFunctor(AbstractRenderer *renderer, SceneManager *sceneManager) : m_sceneManager(sceneManager) , m_renderer(renderer) { } Qt3DCore::QBackendNode *RenderSceneFunctor::create(Qt3DCore::QNodeId id) const { Scene *scene = m_sceneManager->getOrCreateResource(id); scene->setSceneManager(m_sceneManager); scene->setRenderer(m_renderer); return scene; } Qt3DCore::QBackendNode *RenderSceneFunctor::get(Qt3DCore::QNodeId id) const { return m_sceneManager->lookupResource(id); } void RenderSceneFunctor::destroy(Qt3DCore::QNodeId id) const { m_sceneManager->releaseResource(id); } } // namespace Render } // namespace Qt3DRender QT_END_NAMESPACE