From 935d827421fed8e36b7dc845382ec5bb26567760 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Sun, 17 Feb 2019 02:10:25 -0800 Subject: [PATCH] try to cull wearables with avatars --- .../src/avatars-renderer/Avatar.cpp | 24 ++++++++++++++----- .../src/avatars-renderer/Avatar.h | 1 + 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 7d0fc3409a..1f14e3db84 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -75,10 +75,22 @@ namespace render { } template <> uint32_t metaFetchMetaSubItems(const AvatarSharedPointer& avatar, ItemIDs& subItems) { auto avatarPtr = static_pointer_cast(avatar); - if (avatarPtr->getSkeletonModel()) { - auto& metaSubItems = avatarPtr->getSkeletonModel()->fetchRenderItemIDs(); - subItems.insert(subItems.end(), metaSubItems.begin(), metaSubItems.end()); - return (uint32_t) metaSubItems.size(); + if (avatarPtr) { + uint32_t total = 0; + if (avatarPtr->getSkeletonModel()) { + auto& metaSubItems = avatarPtr->getSkeletonModel()->fetchRenderItemIDs(); + subItems.insert(subItems.end(), metaSubItems.begin(), metaSubItems.end()); + total += (uint32_t)metaSubItems.size(); + } + auto& attachmentModels = avatarPtr->getAttachmentModels(); + for (auto& attachmentModel : attachmentModels) { + if (attachmentModel && attachmentModel->isRenderable()) { + auto& metaSubItems = attachmentModel->fetchRenderItemIDs(); + subItems.insert(subItems.end(), metaSubItems.begin(), metaSubItems.end()); + total += (uint32_t)metaSubItems.size(); + } + } + return total; } return 0; } @@ -629,7 +641,7 @@ void Avatar::addToScene(AvatarSharedPointer self, const render::ScenePointer& sc for (auto& attachmentModel : _attachmentModels) { attachmentModel->addToScene(scene, transaction); attachmentModel->setTagMask(render::hifi::TAG_ALL_VIEWS); - attachmentModel->setGroupCulled(false); + attachmentModel->setGroupCulled(true); attachmentModel->setCanCastShadow(true); attachmentModel->setVisibleInScene(_isMeshVisible, scene); } @@ -861,7 +873,7 @@ void Avatar::fixupModelsInScene(const render::ScenePointer& scene) { attachmentModel->addToScene(scene, transaction); attachmentModel->setTagMask(render::hifi::TAG_ALL_VIEWS); - attachmentModel->setGroupCulled(false); + attachmentModel->setGroupCulled(true); attachmentModel->setCanCastShadow(true); attachmentModel->setVisibleInScene(_isMeshVisible, scene); } diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h index 06942a13d8..7df573a38d 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.h +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.h @@ -149,6 +149,7 @@ public: void removeAvatarEntitiesFromTree(); virtual void simulate(float deltaTime, bool inView) = 0; virtual void simulateAttachments(float deltaTime); + const std::vector>& getAttachmentModels() const { return _attachmentModels; } virtual void render(RenderArgs* renderArgs);