fix modeloverlay visible change

(cherry picked from commit 0bb27a7165)
This commit is contained in:
SamGondelman 2017-09-29 17:48:59 -07:00 committed by Sam Gondelman
parent b8ea6c22fa
commit 572986bfad
4 changed files with 34 additions and 17 deletions

View file

@ -47,7 +47,7 @@ public:
void setIsSolid(bool isSolid) { _isSolid = isSolid; } void setIsSolid(bool isSolid) { _isSolid = isSolid; }
void setIsDashedLine(bool isDashedLine) { _isDashedLine = isDashedLine; } void setIsDashedLine(bool isDashedLine) { _isDashedLine = isDashedLine; }
void setIgnoreRayIntersection(bool value) { _ignoreRayIntersection = value; } void setIgnoreRayIntersection(bool value) { _ignoreRayIntersection = value; }
void setDrawInFront(bool value) { _drawInFront = value; } virtual void setDrawInFront(bool value) { _drawInFront = value; }
void setIsGrabbable(bool value) { _isGrabbable = value; } void setIsGrabbable(bool value) { _isGrabbable = value; }
virtual AABox getBounds() const override = 0; virtual AABox getBounds() const override = 0;

View file

@ -60,6 +60,24 @@ void ModelOverlay::update(float deltatime) {
_model->simulate(deltatime); _model->simulate(deltatime);
} }
_isLoaded = _model->isActive(); _isLoaded = _model->isActive();
// check to see if when we added our model to the scene they were ready, if they were not ready, then
// fix them up in the scene
render::ScenePointer scene = qApp->getMain3DScene();
render::Transaction transaction;
if (_model->needsFixupInScene()) {
_model->removeFromScene(scene, transaction);
_model->addToScene(scene, transaction);
}
if (_visibleDirty) {
_visibleDirty = false;
_model->setVisibleInScene(getVisible(), scene);
}
if (_drawInFrontDirty) {
_drawInFrontDirty = false;
_model->setLayeredInFront(getDrawInFront(), scene);
}
scene->enqueueTransaction(transaction);
} }
bool ModelOverlay::addToScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) { bool ModelOverlay::addToScene(Overlay::Pointer overlay, const render::ScenePointer& scene, render::Transaction& transaction) {
@ -73,21 +91,14 @@ void ModelOverlay::removeFromScene(Overlay::Pointer overlay, const render::Scene
_model->removeFromScene(scene, transaction); _model->removeFromScene(scene, transaction);
} }
void ModelOverlay::render(RenderArgs* args) { void ModelOverlay::setVisible(bool visible) {
Overlay::setVisible(visible);
_visibleDirty = true;
}
// check to see if when we added our model to the scene they were ready, if they were not ready, then void ModelOverlay::setDrawInFront(bool drawInFront) {
// fix them up in the scene Base3DOverlay::setDrawInFront(drawInFront);
render::ScenePointer scene = qApp->getMain3DScene(); _drawInFrontDirty = true;
render::Transaction transaction;
if (_model->needsFixupInScene()) {
_model->removeFromScene(scene, transaction);
_model->addToScene(scene, transaction);
}
_model->setVisibleInScene(_visible, scene);
_model->setLayeredInFront(getDrawInFront(), scene);
scene->enqueueTransaction(transaction);
} }
void ModelOverlay::setProperties(const QVariantMap& properties) { void ModelOverlay::setProperties(const QVariantMap& properties) {

View file

@ -28,7 +28,7 @@ public:
ModelOverlay(const ModelOverlay* modelOverlay); ModelOverlay(const ModelOverlay* modelOverlay);
virtual void update(float deltatime) override; virtual void update(float deltatime) override;
virtual void render(RenderArgs* args) override; virtual void render(RenderArgs* args) override {};
void setProperties(const QVariantMap& properties) override; void setProperties(const QVariantMap& properties) override;
QVariant getProperty(const QString& property) override; QVariant getProperty(const QString& property) override;
virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance,
@ -45,6 +45,9 @@ public:
float getLoadPriority() const { return _loadPriority; } float getLoadPriority() const { return _loadPriority; }
void setVisible(bool visible) override;
void setDrawInFront(bool drawInFront) override;
protected: protected:
Transform evalRenderTransform() override; Transform evalRenderTransform() override;
@ -62,6 +65,9 @@ private:
bool _updateModel = { false }; bool _updateModel = { false };
bool _scaleToFit = { false }; bool _scaleToFit = { false };
float _loadPriority { 0.0f }; float _loadPriority { 0.0f };
bool _visibleDirty { false };
bool _drawInFrontDirty { false };
}; };
#endif // hifi_ModelOverlay_h #endif // hifi_ModelOverlay_h

View file

@ -73,7 +73,7 @@ public:
float getAlphaPulse() const { return _alphaPulse; } float getAlphaPulse() const { return _alphaPulse; }
// setters // setters
void setVisible(bool visible) { _visible = visible; } virtual void setVisible(bool visible) { _visible = visible; }
void setDrawHUDLayer(bool drawHUDLayer); void setDrawHUDLayer(bool drawHUDLayer);
void setColor(const xColor& color) { _color = color; } void setColor(const xColor& color) { _color = color; }
void setAlpha(float alpha) { _alpha = alpha; } void setAlpha(float alpha) { _alpha = alpha; }