From 1dce5f80cc68501ea8c72f99ce4450e2a856dfc2 Mon Sep 17 00:00:00 2001 From: Niraj Venkat Date: Thu, 9 Jul 2015 16:17:58 -0700 Subject: [PATCH] Entities are now added/removed from rendering based on Scene.shouldRenderEntities --- interface/src/Application.cpp | 20 ++++++++++++++----- .../src/EntityTreeRenderer.cpp | 19 ++++++++++++++++++ .../src/EntityTreeRenderer.h | 6 ++++++ 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a30df36159..fb1aa737a7 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1014,7 +1014,6 @@ void Application::paintGL() { void Application::runTests() { runTimingTests(); - runUnitTests(); } void Application::audioMuteToggled() { @@ -1183,6 +1182,7 @@ bool Application::event(QEvent* event) { } bool Application::eventFilter(QObject* object, QEvent* event) { + if (event->type() == QEvent::ShortcutOverride) { if (DependencyManager::get()->shouldSwallowShortcut(event)) { event->accept(); @@ -1787,7 +1787,6 @@ void Application::checkFPS() { } void Application::idle() { - PROFILE_RANGE(__FUNCTION__); static SimpleAverage interIdleDurations; static uint64_t lastIdleEnd{ 0 }; @@ -3387,6 +3386,14 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se // load the view frustum loadViewFrustum(theCamera, _displayViewFrustum); + // flip x if in mirror mode (also requires reversing winding order for backface culling) + if (theCamera.getMode() == CAMERA_MODE_MIRROR) { + //glScalef(-1.0f, 1.0f, 1.0f); + //glFrontFace(GL_CW); + } else { + glFrontFace(GL_CCW); + } + // transform view according to theCamera // could be myCamera (if in normal mode) // or could be viewFrustumOffsetCamera if in offset mode @@ -3404,6 +3411,9 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se Transform viewTransform; viewTransform.setTranslation(theCamera.getPosition()); viewTransform.setRotation(rotation); + if (theCamera.getMode() == CAMERA_MODE_MIRROR) { +// viewTransform.setScale(Transform::Vec3(-1.0f, 1.0f, 1.0f)); + } if (renderArgs->_renderSide != RenderArgs::MONO) { glm::mat4 invView = glm::inverse(_untranslatedViewMatrix); @@ -3458,9 +3468,9 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se // Assuming nothing get's rendered through that if (!selfAvatarOnly) { - + auto var = DependencyManager::get()->shouldRenderEntities(); // render models... - if (DependencyManager::get()->shouldRenderEntities()) { + //if (DependencyManager::get()->shouldRenderEntities()) { PerformanceTimer perfTimer("entities"); PerformanceWarning warn(Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings), "Application::displaySide() ... entities..."); @@ -3476,7 +3486,7 @@ void Application::displaySide(RenderArgs* renderArgs, Camera& theCamera, bool se } renderArgs->_debugFlags = renderDebugFlags; _entities.render(renderArgs); - } + //} // render the ambient occlusion effect if enabled if (Menu::getInstance()->isOptionChecked(MenuOption::AmbientOcclusion)) { diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 03d88200c5..58068e7557 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -802,6 +803,8 @@ void EntityTreeRenderer::connectSignalsToSlots(EntityScriptingInterface* entityS connect(this, &EntityTreeRenderer::enterEntity, entityScriptingInterface, &EntityScriptingInterface::enterEntity); connect(this, &EntityTreeRenderer::leaveEntity, entityScriptingInterface, &EntityScriptingInterface::leaveEntity); connect(this, &EntityTreeRenderer::collisionWithEntity, entityScriptingInterface, &EntityScriptingInterface::collisionWithEntity); + + connect(&(*DependencyManager::get()), &SceneScriptingInterface::shouldRenderEntitiesChanged, this, &EntityTreeRenderer::updateEntityTree, Qt::QueuedConnection); } QScriptValueList EntityTreeRenderer::createMouseEventArgs(const EntityItemID& entityID, QMouseEvent* event, unsigned int deviceID) { @@ -1152,3 +1155,19 @@ void EntityTreeRenderer::entityCollisionWithEntity(const EntityItemID& idA, cons entityScriptB.property("collisionWithEntity").call(entityScriptA, args); } } + +void EntityTreeRenderer::updateEntityTree(bool shouldRenderEntities) { + if (DependencyManager::get()->shouldRenderEntities()) { + qDebug() << "SHOULD RENDER ENTITIES NOW"; + for (auto entityID : _entityIDsLastInScene) { + addingEntity(entityID); + } + _entityIDsLastInScene.clear(); + } else { + qDebug() << "SHOULD NOT RENDER ENTITIES"; + _entityIDsLastInScene = _entitiesInScene.keys(); + for (auto entityID : _entityIDsLastInScene) { + deletingEntity(entityID); + } + } +} diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.h b/libraries/entities-renderer/src/EntityTreeRenderer.h index bd6044516f..aae9c63d9a 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.h +++ b/libraries/entities-renderer/src/EntityTreeRenderer.h @@ -90,6 +90,9 @@ public: virtual void scriptContentsAvailable(const QUrl& url, const QString& scriptContents); virtual void errorInLoadingScript(const QUrl& url); + // For Scene.shouldRenderEntities + QList& getEntitiesLastInScene() { return _entityIDsLastInScene; } + signals: void mousePressOnEntity(const RayToEntityIntersectionResult& entityItemID, const QMouseEvent* event, unsigned int deviceId); void mouseMoveOnEntity(const RayToEntityIntersectionResult& entityItemID, const QMouseEvent* event, unsigned int deviceId); @@ -112,6 +115,7 @@ public slots: void deletingEntity(const EntityItemID& entityID); void entitySciptChanging(const EntityItemID& entityID, const bool reload); void entityCollisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision); + void updateEntityTree(bool shouldRenderEntities); // optional slots that can be wired to menu items void setDisplayElementChildProxies(bool value) { _displayElementChildProxies = value; } @@ -188,6 +192,8 @@ private: int _previousStageDay; QHash _entitiesInScene; + // For Scene.shouldRenderEntities + QList _entityIDsLastInScene; };