diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 3650c495f2..63e4069c01 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -427,7 +427,7 @@ public: // Don't actually crash in debug builds, in case this apparent deadlock is simply from // the developer actively debugging code #ifdef NDEBUG - deadlockDetectionCrash(); + // deadlockDetectionCrash(); #endif } } diff --git a/interface/src/ui/overlays/Base3DOverlay.cpp b/interface/src/ui/overlays/Base3DOverlay.cpp index 010be802a9..56fbc8d873 100644 --- a/interface/src/ui/overlays/Base3DOverlay.cpp +++ b/interface/src/ui/overlays/Base3DOverlay.cpp @@ -191,13 +191,14 @@ void Base3DOverlay::setProperties(const QVariantMap& originalProperties) { // Communicate changes to the renderItem if needed if (needRenderItemUpdate) { - auto itemID = getRenderItemID(); + + /* auto itemID = getRenderItemID(); if (render::Item::isValidID(itemID)) { render::ScenePointer scene = qApp->getMain3DScene(); render::Transaction transaction; transaction.updateItem(itemID); scene->enqueueTransaction(transaction); - } + }*/ } } @@ -259,16 +260,39 @@ void Base3DOverlay::locationChanged(bool 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 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() { qApp->getOverlays().deleteOverlay(getOverlayID()); } + +void Base3DOverlay::update(float duration) { + if (_renderTransformDirty) { + setRenderTransform(evalRenderTransform()); + auto itemID = getRenderItemID(); + if (render::Item::isValidID(itemID)) { + render::ScenePointer scene = qApp->getMain3DScene(); + render::Transaction transaction; + + transaction.updateItem(itemID); + scene->enqueueTransaction(transaction); + } + _renderTransformDirty = false; + } +} + +Transform Base3DOverlay::evalRenderTransform() const { + return getTransform(); +} + +void Base3DOverlay::setRenderTransform(const Transform& transform) { + _renderTransform = transform; +} diff --git a/interface/src/ui/overlays/Base3DOverlay.h b/interface/src/ui/overlays/Base3DOverlay.h index 3f57f2e577..fa26993724 100644 --- a/interface/src/ui/overlays/Base3DOverlay.h +++ b/interface/src/ui/overlays/Base3DOverlay.h @@ -52,8 +52,11 @@ public: virtual AABox getBounds() const override = 0; + void update(float deltatime) override; + void notifyRenderTransformChange() const { _renderTransformDirty = true; } - virtual Transform evalRenderTransform() const { return Transform(); } + virtual Transform evalRenderTransform() const; + void setRenderTransform(const Transform& transform); void setProperties(const QVariantMap& properties) override; QVariant getProperty(const QString& property) override; @@ -70,6 +73,8 @@ protected: virtual void locationChanged(bool tellPhysics = true) override; virtual void parentDeleted() override; + mutable Transform _renderTransform; + float _lineWidth; bool _isSolid; bool _isDashedLine; diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 9ad2cef443..490460fdb3 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -180,7 +180,7 @@ void Web3DOverlay::buildWebSurface() { void Web3DOverlay::update(float deltatime) { - if (_renderTransformDirty) { + /* if (_renderTransformDirty) { auto updateTransform = evalRenderTransform(); auto itemID = getRenderItemID(); if (render::Item::isValidID(itemID)) { @@ -194,17 +194,19 @@ void Web3DOverlay::update(float deltatime) { }); scene->enqueueTransaction(transaction); } - } + }*/ if (_webSurface) { // update globalPosition _webSurface->getSurfaceContext()->setContextProperty("globalPosition", vec3toVariant(getPosition())); } + + Billboard3DOverlay::update(deltatime); + } Transform Web3DOverlay::evalRenderTransform() const { - if (_renderTransformDirty) { - _updateTransform = getTransform(); + auto transform = getTransform(); // FIXME: applyTransformTo causes tablet overlay to detach from tablet entity. // Perhaps rather than deleting the following code it should be run only if isFacingAvatar() is true? @@ -214,15 +216,10 @@ Transform Web3DOverlay::evalRenderTransform() const { */ if (glm::length2(getDimensions()) != 1.0f) { - _updateTransform.postScale(vec3(getDimensions(), 1.0f)); + transform.postScale(vec3(getDimensions(), 1.0f)); } - _renderTransformDirty = false; - } - return _updateTransform; -} - -void Web3DOverlay::setRenderTransform(const Transform& transform) { - _renderTransform = transform; + + return transform; } QString Web3DOverlay::pickURL() { diff --git a/interface/src/ui/overlays/Web3DOverlay.h b/interface/src/ui/overlays/Web3DOverlay.h index ef40d88333..7acaf5a430 100644 --- a/interface/src/ui/overlays/Web3DOverlay.h +++ b/interface/src/ui/overlays/Web3DOverlay.h @@ -38,7 +38,6 @@ public: virtual void update(float deltatime) override; Transform evalRenderTransform() const override; - void setRenderTransform(const Transform& transform); QObject* getEventHandler(); void setProxyWindow(QWindow* proxyWindow); @@ -95,9 +94,6 @@ private: std::map _activeTouchPoints; QTouchDevice _touchDevice; - mutable Transform _updateTransform; - mutable Transform _renderTransform; - uint8_t _desiredMaxFPS { 10 }; uint8_t _currentMaxFPS { 0 }; diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 42bb91ce94..5fc7c7a1b1 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -235,15 +235,18 @@ void Model::updateRenderItems() { uint32_t deleteGeometryCounter = self->_deleteGeometryCounter; + Transform modelTransform = self->getTransform(); + // Transform modelTransform = model->getTransform(); + modelTransform.setScale(glm::vec3(1.0f)); + render::Transaction transaction; foreach (auto itemID, self->_modelMeshRenderItemsMap.keys()) { - transaction.updateItem(itemID, [deleteGeometryCounter](ModelMeshPartPayload& data) { + transaction.updateItem(itemID, [deleteGeometryCounter, modelTransform](ModelMeshPartPayload& data) { ModelPointer model = data._model.lock(); if (model && model->isLoaded()) { // Ensure the model geometry was not reset between frames if (deleteGeometryCounter == model->_deleteGeometryCounter) { - Transform modelTransform = model->getTransform(); - modelTransform.setScale(glm::vec3(1.0f)); + const Model::MeshState& state = model->getMeshState(data._meshIndex); Transform renderTransform = modelTransform; @@ -259,7 +262,7 @@ void Model::updateRenderItems() { // collision mesh does not share the same unit scale as the FBX file's mesh: only apply offset Transform collisionMeshOffset; collisionMeshOffset.setIdentity(); - Transform modelTransform = self->getTransform(); + // Transform modelTransform = self->getTransform(); foreach(auto itemID, self->_collisionRenderItemsMap.keys()) { transaction.updateItem(itemID, [modelTransform, collisionMeshOffset](MeshPartPayload& data) { // update the model transform for this render item.