From dacc6f66c031c302264f939a4eaa0c128d3917f4 Mon Sep 17 00:00:00 2001 From: Niraj Venkat Date: Fri, 10 Jul 2015 17:26:56 -0700 Subject: [PATCH 1/6] Avatars rendered correctly based on Scene.shouldRenderAvatars --- interface/src/avatar/Avatar.h | 8 +++++++ interface/src/avatar/AvatarManager.cpp | 33 ++++++++++++++++++++++++-- interface/src/avatar/AvatarManager.h | 7 ++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index b23059acb0..58e76cd960 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -91,6 +91,14 @@ public: void removeFromScene(AvatarSharedPointer self, std::shared_ptr scene, render::PendingChanges& pendingChanges); + //For Scene.shouldRenderAvatars + /*bool addToSceneOnStatusUpdate(AvatarSharedPointer self, std::shared_ptr scene, + render::PendingChanges& pendingChanges); + + void removeFromSceneOnStatusUpdate(AvatarSharedPointer self, std::shared_ptr scene, + render::PendingChanges& pendingChanges);*/ + + //setters void setDisplayingLookatVectors(bool displayingLookatVectors) { getHead()->setRenderLookatVectors(displayingLookatVectors); } void setIsLookAtTarget(const bool isLookAtTarget) { _isLookAtTarget = isLookAtTarget; } diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 944f16fd34..b4893389c5 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -72,9 +72,13 @@ void AvatarManager::init() { _myAvatar->init(); _avatarHash.insert(MY_AVATAR_KEY, _myAvatar); + connect(&(*DependencyManager::get()), &SceneScriptingInterface::shouldRenderAvatarsChanged, this, &AvatarManager::updateAvatarRenderStatus, Qt::QueuedConnection); + render::ScenePointer scene = Application::getInstance()->getMain3DScene(); render::PendingChanges pendingChanges; - _myAvatar->addToScene(_myAvatar, scene, pendingChanges); + if (DependencyManager::get()->shouldRenderAvatars()) { + _myAvatar->addToScene(_myAvatar, scene, pendingChanges); + } scene->enqueuePendingChanges(pendingChanges); } @@ -158,7 +162,9 @@ AvatarSharedPointer AvatarManager::addAvatar(const QUuid& sessionUUID, const QWe auto avatar = std::dynamic_pointer_cast(AvatarHashMap::addAvatar(sessionUUID, mixerWeakPointer)); render::ScenePointer scene = Application::getInstance()->getMain3DScene(); render::PendingChanges pendingChanges; - avatar->addToScene(avatar, scene, pendingChanges); + if (DependencyManager::get()->shouldRenderAvatars()) { + avatar->addToScene(avatar, scene, pendingChanges); + } scene->enqueuePendingChanges(pendingChanges); return avatar; } @@ -310,3 +316,26 @@ void AvatarManager::updateAvatarPhysicsShape(const QUuid& id) { } } } + +void AvatarManager::updateAvatarRenderStatus(bool shouldRenderAvatars) { + if (DependencyManager::get()->shouldRenderAvatars()) { + for (auto avatarData : _avatarsLastInScene) { + auto avatar = std::dynamic_pointer_cast(avatarData); + render::ScenePointer scene = Application::getInstance()->getMain3DScene(); + render::PendingChanges pendingChanges; + avatar->addToScene(avatar, scene, pendingChanges); + scene->enqueuePendingChanges(pendingChanges); + } + _avatarsLastInScene.clear(); + } + else { + _avatarsLastInScene = _avatarHash.values(); + for (auto avatarData : _avatarsLastInScene) { + auto avatar = std::dynamic_pointer_cast(avatarData); + render::ScenePointer scene = Application::getInstance()->getMain3DScene(); + render::PendingChanges pendingChanges; + avatar->removeFromScene(avatar, scene, pendingChanges); + scene->enqueuePendingChanges(pendingChanges); + } + } +} diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 9d1c94a47e..0e9d1aa01c 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -60,9 +60,13 @@ public: void handleCollisionEvents(CollisionEvents& collisionEvents); void updateAvatarPhysicsShape(const QUuid& id); + + // For Scene.shouldRenderEntities + QList& getAvatarsLastInScene() { return _avatarIDsLastInScene; } public slots: void setShouldShowReceiveStats(bool shouldShowReceiveStats) { _shouldShowReceiveStats = shouldShowReceiveStats; } + void updateAvatarRenderStatus(bool shouldRenderAvatars); private: AvatarManager(QObject* parent = 0); @@ -88,6 +92,9 @@ private: SetOfMotionStates _motionStatesToAdd; VectorOfMotionStates _motionStatesToDelete; VectorOfMotionStates _tempMotionStates; + + // For Scene.shouldRenderAvatars + QList _avatarsLastInScene; }; Q_DECLARE_METATYPE(AvatarManager::LocalLight) From bbd7b2a65e22a4f179de700bd8655cd72e9ed714 Mon Sep 17 00:00:00 2001 From: Niraj Venkat Date: Fri, 10 Jul 2015 17:31:49 -0700 Subject: [PATCH 2/6] Removed unused functions --- interface/src/avatar/Avatar.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 58e76cd960..0bb0309217 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -91,13 +91,6 @@ public: void removeFromScene(AvatarSharedPointer self, std::shared_ptr scene, render::PendingChanges& pendingChanges); - //For Scene.shouldRenderAvatars - /*bool addToSceneOnStatusUpdate(AvatarSharedPointer self, std::shared_ptr scene, - render::PendingChanges& pendingChanges); - - void removeFromSceneOnStatusUpdate(AvatarSharedPointer self, std::shared_ptr scene, - render::PendingChanges& pendingChanges);*/ - //setters void setDisplayingLookatVectors(bool displayingLookatVectors) { getHead()->setRenderLookatVectors(displayingLookatVectors); } From f95bd3f7bd635469636533d165576c7c5834cb1e Mon Sep 17 00:00:00 2001 From: Niraj Venkat Date: Fri, 10 Jul 2015 17:46:20 -0700 Subject: [PATCH 3/6] Fixing build error --- interface/src/avatar/AvatarManager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 0e9d1aa01c..4b0df66439 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -62,7 +62,7 @@ public: void updateAvatarPhysicsShape(const QUuid& id); // For Scene.shouldRenderEntities - QList& getAvatarsLastInScene() { return _avatarIDsLastInScene; } + QList& getAvatarsLastInScene() { return _avatarsLastInScene; } public slots: void setShouldShowReceiveStats(bool shouldShowReceiveStats) { _shouldShowReceiveStats = shouldShowReceiveStats; } From 10e0a93ac096e460078cd56790f65afe4de691d4 Mon Sep 17 00:00:00 2001 From: Niraj Venkat Date: Mon, 13 Jul 2015 15:22:00 -0700 Subject: [PATCH 4/6] Fix for avatar rendering not working on domain exit/entry --- interface/src/avatar/AvatarManager.cpp | 6 ++---- interface/src/avatar/AvatarManager.h | 5 ----- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index b4893389c5..f5a352bcca 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -319,18 +319,16 @@ void AvatarManager::updateAvatarPhysicsShape(const QUuid& id) { void AvatarManager::updateAvatarRenderStatus(bool shouldRenderAvatars) { if (DependencyManager::get()->shouldRenderAvatars()) { - for (auto avatarData : _avatarsLastInScene) { + for (auto avatarData : _avatarHash) { auto avatar = std::dynamic_pointer_cast(avatarData); render::ScenePointer scene = Application::getInstance()->getMain3DScene(); render::PendingChanges pendingChanges; avatar->addToScene(avatar, scene, pendingChanges); scene->enqueuePendingChanges(pendingChanges); } - _avatarsLastInScene.clear(); } else { - _avatarsLastInScene = _avatarHash.values(); - for (auto avatarData : _avatarsLastInScene) { + for (auto avatarData : _avatarHash) { auto avatar = std::dynamic_pointer_cast(avatarData); render::ScenePointer scene = Application::getInstance()->getMain3DScene(); render::PendingChanges pendingChanges; diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 4b0df66439..06509d8f75 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -60,9 +60,6 @@ public: void handleCollisionEvents(CollisionEvents& collisionEvents); void updateAvatarPhysicsShape(const QUuid& id); - - // For Scene.shouldRenderEntities - QList& getAvatarsLastInScene() { return _avatarsLastInScene; } public slots: void setShouldShowReceiveStats(bool shouldShowReceiveStats) { _shouldShowReceiveStats = shouldShowReceiveStats; } @@ -93,8 +90,6 @@ private: VectorOfMotionStates _motionStatesToDelete; VectorOfMotionStates _tempMotionStates; - // For Scene.shouldRenderAvatars - QList _avatarsLastInScene; }; Q_DECLARE_METATYPE(AvatarManager::LocalLight) From 1f1a5f8e751b3acb810be81e833984762bfbd23c Mon Sep 17 00:00:00 2001 From: Niraj Venkat Date: Mon, 13 Jul 2015 22:57:11 -0700 Subject: [PATCH 5/6] Coding standard and fixing pointers --- interface/src/avatar/AvatarManager.cpp | 5 ++--- interface/src/avatar/AvatarManager.h | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index f5a352bcca..8e7a03685b 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -72,7 +72,7 @@ void AvatarManager::init() { _myAvatar->init(); _avatarHash.insert(MY_AVATAR_KEY, _myAvatar); - connect(&(*DependencyManager::get()), &SceneScriptingInterface::shouldRenderAvatarsChanged, this, &AvatarManager::updateAvatarRenderStatus, Qt::QueuedConnection); + connect(DependencyManager::get().data(), &SceneScriptingInterface::shouldRenderAvatarsChanged, this, &AvatarManager::updateAvatarRenderStatus, Qt::QueuedConnection); render::ScenePointer scene = Application::getInstance()->getMain3DScene(); render::PendingChanges pendingChanges; @@ -326,8 +326,7 @@ void AvatarManager::updateAvatarRenderStatus(bool shouldRenderAvatars) { avatar->addToScene(avatar, scene, pendingChanges); scene->enqueuePendingChanges(pendingChanges); } - } - else { + } else { for (auto avatarData : _avatarHash) { auto avatar = std::dynamic_pointer_cast(avatarData); render::ScenePointer scene = Application::getInstance()->getMain3DScene(); diff --git a/interface/src/avatar/AvatarManager.h b/interface/src/avatar/AvatarManager.h index 06509d8f75..d066158a0c 100644 --- a/interface/src/avatar/AvatarManager.h +++ b/interface/src/avatar/AvatarManager.h @@ -89,7 +89,6 @@ private: SetOfMotionStates _motionStatesToAdd; VectorOfMotionStates _motionStatesToDelete; VectorOfMotionStates _tempMotionStates; - }; Q_DECLARE_METATYPE(AvatarManager::LocalLight) From ef3c6b25e0d8547d2dae1f81ede4ef505c246a3b Mon Sep 17 00:00:00 2001 From: Niraj Venkat Date: Tue, 14 Jul 2015 00:45:38 -0700 Subject: [PATCH 6/6] More coding standard changes --- interface/src/avatar/Avatar.h | 1 - libraries/entities-renderer/src/EntityTreeRenderer.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 0bb0309217..b23059acb0 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -91,7 +91,6 @@ public: void removeFromScene(AvatarSharedPointer self, std::shared_ptr scene, render::PendingChanges& pendingChanges); - //setters void setDisplayingLookatVectors(bool displayingLookatVectors) { getHead()->setRenderLookatVectors(displayingLookatVectors); } void setIsLookAtTarget(const bool isLookAtTarget) { _isLookAtTarget = isLookAtTarget; } diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 11d24c6d9d..9b5925e5ab 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -803,7 +803,7 @@ void EntityTreeRenderer::connectSignalsToSlots(EntityScriptingInterface* entityS connect(this, &EntityTreeRenderer::leaveEntity, entityScriptingInterface, &EntityScriptingInterface::leaveEntity); connect(this, &EntityTreeRenderer::collisionWithEntity, entityScriptingInterface, &EntityScriptingInterface::collisionWithEntity); - connect(&(*DependencyManager::get()), &SceneScriptingInterface::shouldRenderEntitiesChanged, this, &EntityTreeRenderer::updateEntityRenderStatus, Qt::QueuedConnection); + connect(DependencyManager::get().data(), &SceneScriptingInterface::shouldRenderEntitiesChanged, this, &EntityTreeRenderer::updateEntityRenderStatus, Qt::QueuedConnection); } QScriptValueList EntityTreeRenderer::createMouseEventArgs(const EntityItemID& entityID, QMouseEvent* event, unsigned int deviceID) {