diff --git a/examples/utilities/tools/developerMenuItems.js b/examples/utilities/tools/developerMenuItems.js index a7e487222e..a691031131 100644 --- a/examples/utilities/tools/developerMenuItems.js +++ b/examples/utilities/tools/developerMenuItems.js @@ -70,10 +70,13 @@ Menu.menuItemEvent.connect(function (menuItem) { } }); -setupMenus(); +Scene.shouldRenderAvatarsChanged.connect(function(shouldRenderAvatars) { + Menu.setIsOptionChecked(AVATARS_ITEM, shouldRenderAvatars) +}); -// register our scriptEnding callback -Script.scriptEnding.connect(scriptEnding); +Scene.shouldRenderEntitiesChanged.connect(function(shouldRenderEntities) { + Menu.setIsOptionChecked(ENTITIES_ITEM, shouldRenderEntities) +}); function scriptEnding() { Menu.removeMenu(ENTITIES_MENU); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 5ed8f484b6..806fed7174 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2997,7 +2997,7 @@ void Application::displaySide(Camera& theCamera, bool selfAvatarOnly, RenderArgs bool mirrorMode = (theCamera.getMode() == CAMERA_MODE_MIRROR); - if (DependencyManager::get()->shouldRenderAvatars()) { + { PerformanceTimer perfTimer("avatars"); DependencyManager::get()->renderAvatars(mirrorMode ? Avatar::MIRROR_RENDER_MODE : Avatar::NORMAL_RENDER_MODE, false, selfAvatarOnly); diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 0ffcf19bf9..b689c11800 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -25,6 +25,7 @@ #include "AvatarManager.h" #include "Menu.h" #include "MyAvatar.h" +#include "SceneScriptingInterface.h" // 70 times per second - target is 60hz, but this helps account for any small deviations // in the update loop @@ -122,15 +123,17 @@ void AvatarManager::renderAvatars(Avatar::RenderMode renderMode, bool postLighti glm::vec3 cameraPosition = Application::getInstance()->getCamera()->getPosition(); if (!selfAvatarOnly) { - foreach (const AvatarSharedPointer& avatarPointer, _avatarHash) { - Avatar* avatar = static_cast(avatarPointer.data()); - if (!avatar->isInitialized()) { - continue; + if (DependencyManager::get()->shouldRenderAvatars()) { + foreach (const AvatarSharedPointer& avatarPointer, _avatarHash) { + Avatar* avatar = static_cast(avatarPointer.data()); + if (!avatar->isInitialized()) { + continue; + } + avatar->render(cameraPosition, renderMode, postLighting); + avatar->setDisplayingLookatVectors(renderLookAtVectors); } - avatar->render(cameraPosition, renderMode, postLighting); - avatar->setDisplayingLookatVectors(renderLookAtVectors); + renderAvatarFades(cameraPosition, renderMode); } - renderAvatarFades(cameraPosition, renderMode); } else { // just render myAvatar _myAvatar->render(cameraPosition, renderMode, postLighting); diff --git a/libraries/script-engine/src/SceneScriptingInterface.cpp b/libraries/script-engine/src/SceneScriptingInterface.cpp index 3026c0c95d..5a8f591410 100644 --- a/libraries/script-engine/src/SceneScriptingInterface.cpp +++ b/libraries/script-engine/src/SceneScriptingInterface.cpp @@ -64,4 +64,18 @@ float SceneScriptingInterface::getSunIntensity() const { model::SunSkyStagePointer SceneScriptingInterface::getSkyStage() const { return _skyStage; +} + +void SceneScriptingInterface::setShouldRenderAvatars(bool shouldRenderAvatars) { + if (shouldRenderAvatars != _shouldRenderAvatars) { + _shouldRenderAvatars = shouldRenderAvatars; + emit shouldRenderAvatarsChanged(_shouldRenderAvatars); + } +} + +void SceneScriptingInterface::setShouldRenderEntities(bool shouldRenderEntities) { + if (shouldRenderEntities != _shouldRenderEntities) { + _shouldRenderEntities = shouldRenderEntities; + emit shouldRenderEntitiesChanged(_shouldRenderEntities); + } } \ No newline at end of file diff --git a/libraries/script-engine/src/SceneScriptingInterface.h b/libraries/script-engine/src/SceneScriptingInterface.h index c57a343e9d..352bc1e78f 100644 --- a/libraries/script-engine/src/SceneScriptingInterface.h +++ b/libraries/script-engine/src/SceneScriptingInterface.h @@ -45,12 +45,15 @@ public: model::SunSkyStagePointer getSkyStage() const; - Q_INVOKABLE void setShouldRenderAvatars(bool shouldRenderAvatars) { _shouldRenderAvatars = shouldRenderAvatars; } + Q_INVOKABLE void setShouldRenderAvatars(bool shouldRenderAvatars); Q_INVOKABLE bool shouldRenderAvatars() const { return _shouldRenderAvatars; } - Q_INVOKABLE void setShouldRenderEntities(bool shouldRenderEntities) { _shouldRenderEntities = shouldRenderEntities; } + Q_INVOKABLE void setShouldRenderEntities(bool shouldRenderEntities); Q_INVOKABLE bool shouldRenderEntities() const { return _shouldRenderEntities; } - + +signals: + void shouldRenderAvatarsChanged(bool shouldRenderAvatars); + void shouldRenderEntitiesChanged(bool shouldRenderEntities); protected: SceneScriptingInterface() {}; ~SceneScriptingInterface() {};