diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2014-05-02 11:07:38 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-24 11:10:42 +0200 |
commit | 727d7f83735f5128058d661a1633a2b435fcf4b5 (patch) | |
tree | 5465bef6fea4ca61cf466c98cda6e30afa53fc82 | |
parent | 67e0e3e06589fde78e5587afa2f6870d7120deb2 (diff) |
RenderMesh set to dirty on peer change
This allows the RenderMesh - MeshData link to be updated when the frontent
peer Mesh assigned to RenderMesh is updated.
Change-Id: I36c6beca551709e5f0f68e3bfe354bf7baa78885
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | examples/simple-qml/main.qml | 3 | ||||
-rw-r--r-- | src/render/backend/rendermesh.cpp | 1 | ||||
-rw-r--r-- | src/render/backend/rendernode.cpp | 5 | ||||
-rw-r--r-- | src/render/backend/renderview.cpp | 5 |
4 files changed, 10 insertions, 4 deletions
diff --git a/examples/simple-qml/main.qml b/examples/simple-qml/main.qml index ffb7311c0..436cdfb31 100644 --- a/examples/simple-qml/main.qml +++ b/examples/simple-qml/main.qml @@ -64,7 +64,8 @@ Node { { console.log("Triggered <<<<<<<<<<<<<<<<<<<<< " + test); camera2.transform = test ? transform_0 : transform_1 - ball2.mesh = test ? cubeMesh : ballMesh + ball2.mesh = test ? null : ballMesh + ball1.mesh = test ? cubeMesh : ballMesh test = !test } } diff --git a/src/render/backend/rendermesh.cpp b/src/render/backend/rendermesh.cpp index 5b78eb252..2a2c57f9d 100644 --- a/src/render/backend/rendermesh.cpp +++ b/src/render/backend/rendermesh.cpp @@ -86,6 +86,7 @@ void RenderMesh::setPeer(Mesh *peer) if (m_peer) arbiter->unregisterObserver(this, m_peer); m_peer = peer; + m_meshDirty = true; if (m_peer) arbiter->registerObserver(this, m_peer, ComponentUpdated); } diff --git a/src/render/backend/rendernode.cpp b/src/render/backend/rendernode.cpp index 90f6d00b4..9ae59959d 100644 --- a/src/render/backend/rendernode.cpp +++ b/src/render/backend/rendernode.cpp @@ -47,6 +47,7 @@ #include "cameramanager.h" #include "materialmanager.h" #include "meshmanager.h" +#include "meshdatamanager.h" #include "mesh.h" #include <cameralens.h> #include <transform.h> @@ -157,8 +158,10 @@ void RenderNode::sceneChangeEvent(const QSceneChangePtr &e) } else if (qobject_cast<Mesh *>(component)) { RenderMesh *mesh = m_renderer->meshManager()->lookupResource(m_frontEndPeer->asEntity()->uuid()); - if (mesh != Q_NULLPTR) + if (mesh != Q_NULLPTR) { mesh->setPeer(qobject_cast<Mesh *>(component)); + m_renderer->meshDataManager()->addMeshData(mesh->peer()); + } } } break; diff --git a/src/render/backend/renderview.cpp b/src/render/backend/renderview.cpp index 0decb43f2..d080654fb 100644 --- a/src/render/backend/renderview.cpp +++ b/src/render/backend/renderview.cpp @@ -157,10 +157,11 @@ void RenderView::buildRenderCommands(RenderNode *node) HMesh meshHandle; if (m_renderer->meshManager()->contains(frontEndEntity->uuid()) && (meshHandle = m_renderer->meshManager()->lookupHandle(frontEndEntity->uuid())) != HMesh()) { + RenderMesh *mesh = m_renderer->meshManager()->data(meshHandle); + if (mesh == Q_NULLPTR || mesh->peer() == Q_NULLPTR) + return ; RenderCommand *command = new RenderCommand(); command->m_mesh = meshHandle; - RenderMesh *mesh = m_renderer->meshManager()->data(command->m_mesh); - Q_ASSERT(mesh); if (mesh->meshDirty()) { mesh->setMeshData(m_renderer->meshDataManager()->lookupHandle(mesh->peer()->uuid())); qCDebug(Backend) << Q_FUNC_INFO << "Updating RenderMesh -> MeshData handle"; |