From 30bf80096314871fe772d12be76d6b0a29795b25 Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Thu, 14 Sep 2017 20:33:08 -0700 Subject: [PATCH] Cleanup --- interface/src/ui/overlays/Base3DOverlay.cpp | 52 +++++---------------- interface/src/ui/overlays/Base3DOverlay.h | 5 +- interface/src/ui/overlays/Web3DOverlay.cpp | 2 +- 3 files changed, 16 insertions(+), 43 deletions(-) diff --git a/interface/src/ui/overlays/Base3DOverlay.cpp b/interface/src/ui/overlays/Base3DOverlay.cpp index b450fbdc05..53af2ea882 100644 --- a/interface/src/ui/overlays/Base3DOverlay.cpp +++ b/interface/src/ui/overlays/Base3DOverlay.cpp @@ -256,17 +256,8 @@ bool Base3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::vec3 void Base3DOverlay::locationChanged(bool tellPhysics) { SpatiallyNestable::locationChanged(tellPhysics); - // Force the actual update of the render transform now that we notify for the change - // so it s captured for the time of rendering + // Force the actual update of the render transform through the notify call notifyRenderTransformChange(); - - /* auto itemID = getRenderItemID(); - if (render::Item::isValidID(itemID)) { - render::ScenePointer scene = qApp->getMain3DScene(); - render::Transaction transaction; - transaction.updateItem(itemID); - scene->enqueueTransaction(transaction); - }*/ } void Base3DOverlay::parentDeleted() { @@ -274,44 +265,25 @@ void Base3DOverlay::parentDeleted() { } void Base3DOverlay::update(float duration) { + + // In Base3DOverlay, if its location or bound changed, the renderTrasnformDirty flag is true. + // then the correct transform used for rendering is computed in the update transaction and assigned. + // TODO: Fix the value to be computed in main thread now and passed by value to the render item. + // This is the simplest fix for the web overlay of the tablet for now if (_renderTransformDirty) { - auto self = this; - // queue up this work for later processing, at the end of update and just before rendering. - // the application will ensure only the last lambda is actually invoked. - /* void* key = (void*)this; - std::weak_ptr weakSelf = shared_from_this(); - AbstractViewStateInterface::instance()->pushPostUpdateLambda(key, [weakSelf]() { - // do nothing, if the model has already been destroyed. - auto spatiallyNestableSelf = weakSelf.lock(); - if (!spatiallyNestableSelf) { - return; - } - auto self = std::dynamic_pointer_cast(spatiallyNestableSelf); - */ - #ifdef UpdateInMain - self->setRenderTransform(self->evalRenderTransform()); - #else - auto renderTransform = self->evalRenderTransform(); - #endif - auto itemID = self->getRenderItemID(); - if (render::Item::isValidID(itemID)) { + auto itemID = getRenderItemID(); + if (render::Item::isValidID(itemID)) { render::ScenePointer scene = qApp->getMain3DScene(); render::Transaction transaction; - #ifdef UpdateInMain - transaction.updateItem(itemID); - #else - transaction.updateItem(itemID, [renderTransform](Overlay& data) { + transaction.updateItem(itemID, [](Overlay& data) { auto overlay3D = dynamic_cast(&data); if (overlay3D) { auto latestTransform = overlay3D->evalRenderTransform(); - overlay3D->setRenderTransform(latestTransform);// evalRenderTransform(); + overlay3D->setRenderTransform(latestTransform); } }); - #endif - scene->enqueueTransaction(transaction); - + scene->enqueueTransaction(transaction); } - // }); _renderTransformDirty = false; } } @@ -326,4 +298,4 @@ Transform Base3DOverlay::evalRenderTransform() const { void Base3DOverlay::setRenderTransform(const Transform& transform) { _renderTransform = transform; -} \ No newline at end of file +} diff --git a/interface/src/ui/overlays/Base3DOverlay.h b/interface/src/ui/overlays/Base3DOverlay.h index b2167852d4..55b55ed16f 100644 --- a/interface/src/ui/overlays/Base3DOverlay.h +++ b/interface/src/ui/overlays/Base3DOverlay.h @@ -55,8 +55,6 @@ public: void update(float deltatime) override; void notifyRenderTransformChange() const; - virtual Transform evalRenderTransform() const; - void setRenderTransform(const Transform& transform); void setProperties(const QVariantMap& properties) override; QVariant getProperty(const QString& property) override; @@ -74,6 +72,9 @@ protected: virtual void parentDeleted() override; mutable Transform _renderTransform; + virtual Transform evalRenderTransform() const; + virtual void setRenderTransform(const Transform& transform); + const Transform& getRenderTransform() const { return _renderTransform; } float _lineWidth; bool _isSolid; diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index fd3763624e..809536add9 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -320,7 +320,7 @@ void Web3DOverlay::render(RenderArgs* args) { Q_ASSERT(args->_batch); gpu::Batch& batch = *args->_batch; batch.setResourceTexture(0, _texture); - batch.setModelTransform(_renderTransform); + batch.setModelTransform(getRenderTransform()); auto geometryCache = DependencyManager::get(); if (color.a < OPAQUE_ALPHA_THRESHOLD) {