From 16f545a9e8d8900549ff2ef958d50f3a8d63a19b Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 12 Dec 2017 11:41:49 -0800 Subject: [PATCH] fix circle3d overlays --- interface/src/ui/overlays/Base3DOverlay.h | 4 +- interface/src/ui/overlays/Circle3DOverlay.cpp | 54 +++++++++++++------ interface/src/ui/overlays/Circle3DOverlay.h | 20 +++---- interface/src/ui/overlays/Overlay.cpp | 4 +- interface/src/ui/overlays/Overlay.h | 3 ++ interface/src/ui/overlays/Planar3DOverlay.h | 4 +- 6 files changed, 57 insertions(+), 32 deletions(-) diff --git a/interface/src/ui/overlays/Base3DOverlay.h b/interface/src/ui/overlays/Base3DOverlay.h index 6323ff9dc8..d65b9850d7 100644 --- a/interface/src/ui/overlays/Base3DOverlay.h +++ b/interface/src/ui/overlays/Base3DOverlay.h @@ -61,8 +61,8 @@ public: void notifyRenderVariableChange() const; - void setProperties(const QVariantMap& properties) override; - QVariant getProperty(const QString& property) override; + virtual void setProperties(const QVariantMap& properties) override; + virtual QVariant getProperty(const QString& property) override; virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face, glm::vec3& surfaceNormal); diff --git a/interface/src/ui/overlays/Circle3DOverlay.cpp b/interface/src/ui/overlays/Circle3DOverlay.cpp index a8230d6bee..658e91865e 100644 --- a/interface/src/ui/overlays/Circle3DOverlay.cpp +++ b/interface/src/ui/overlays/Circle3DOverlay.cpp @@ -16,10 +16,7 @@ QString const Circle3DOverlay::TYPE = "circle3d"; -Circle3DOverlay::Circle3DOverlay() { - memset(&_minorTickMarksColor, 0, sizeof(_minorTickMarksColor)); - memset(&_majorTickMarksColor, 0, sizeof(_majorTickMarksColor)); -} +Circle3DOverlay::Circle3DOverlay() {} Circle3DOverlay::Circle3DOverlay(const Circle3DOverlay* circle3DOverlay) : Planar3DOverlay(circle3DOverlay), @@ -27,17 +24,21 @@ Circle3DOverlay::Circle3DOverlay(const Circle3DOverlay* circle3DOverlay) : _endAt(circle3DOverlay->_endAt), _outerRadius(circle3DOverlay->_outerRadius), _innerRadius(circle3DOverlay->_innerRadius), + _innerStartColor(circle3DOverlay->_innerStartColor), + _innerEndColor(circle3DOverlay->_innerEndColor), + _outerStartColor(circle3DOverlay->_outerStartColor), + _outerEndColor(circle3DOverlay->_outerEndColor), + _innerStartAlpha(circle3DOverlay->_innerStartAlpha), + _innerEndAlpha(circle3DOverlay->_innerEndAlpha), + _outerStartAlpha(circle3DOverlay->_outerStartAlpha), + _outerEndAlpha(circle3DOverlay->_outerEndAlpha), _hasTickMarks(circle3DOverlay->_hasTickMarks), _majorTickMarksAngle(circle3DOverlay->_majorTickMarksAngle), _minorTickMarksAngle(circle3DOverlay->_minorTickMarksAngle), _majorTickMarksLength(circle3DOverlay->_majorTickMarksLength), _minorTickMarksLength(circle3DOverlay->_minorTickMarksLength), _majorTickMarksColor(circle3DOverlay->_majorTickMarksColor), - _minorTickMarksColor(circle3DOverlay->_minorTickMarksColor), - _quadVerticesID(GeometryCache::UNKNOWN_ID), - _lineVerticesID(GeometryCache::UNKNOWN_ID), - _majorTicksVerticesID(GeometryCache::UNKNOWN_ID), - _minorTicksVerticesID(GeometryCache::UNKNOWN_ID) + _minorTickMarksColor(circle3DOverlay->_minorTickMarksColor) { } @@ -80,9 +81,8 @@ void Circle3DOverlay::render(RenderArgs* args) { Q_ASSERT(args->_batch); auto& batch = *args->_batch; - if (args->_shapePipeline) { - batch.setPipeline(args->_shapePipeline->pipeline); - } + + DependencyManager::get()->bindSimpleProgram(batch, false, isTransparent(), false, !getIsSolid(), true); batch.setModelTransform(getRenderTransform()); @@ -185,11 +185,10 @@ void Circle3DOverlay::render(RenderArgs* args) { // for our overlay, is solid means we draw a ring between the inner and outer radius of the circle, otherwise // we just draw a line... if (getHasTickMarks()) { - - if (_majorTicksVerticesID == GeometryCache::UNKNOWN_ID) { + if (!_majorTicksVerticesID) { _majorTicksVerticesID = geometryCache->allocateID(); } - if (_minorTicksVerticesID == GeometryCache::UNKNOWN_ID) { + if (!_minorTicksVerticesID) { _minorTicksVerticesID = geometryCache->allocateID(); } @@ -384,6 +383,30 @@ QVariant Circle3DOverlay::getProperty(const QString& property) { if (property == "innerRadius") { return _innerRadius; } + if (property == "innerStartColor") { + return xColorToVariant(_innerStartColor); + } + if (property == "innerEndColor") { + return xColorToVariant(_innerEndColor); + } + if (property == "outerStartColor") { + return xColorToVariant(_outerStartColor); + } + if (property == "outerEndColor") { + return xColorToVariant(_outerEndColor); + } + if (property == "innerStartAlpha") { + return _innerStartAlpha; + } + if (property == "innerEndAlpha") { + return _innerEndAlpha; + } + if (property == "outerStartAlpha") { + return _outerStartAlpha; + } + if (property == "outerEndAlpha") { + return _outerEndAlpha; + } if (property == "hasTickMarks") { return _hasTickMarks; } @@ -409,7 +432,6 @@ QVariant Circle3DOverlay::getProperty(const QString& property) { return Planar3DOverlay::getProperty(property); } - bool Circle3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face, glm::vec3& surfaceNormal) { diff --git a/interface/src/ui/overlays/Circle3DOverlay.h b/interface/src/ui/overlays/Circle3DOverlay.h index 11c9c9710f..ef491b7f46 100644 --- a/interface/src/ui/overlays/Circle3DOverlay.h +++ b/interface/src/ui/overlays/Circle3DOverlay.h @@ -65,22 +65,22 @@ protected: float _outerRadius { 1 }; float _innerRadius { 0 }; - xColor _innerStartColor; - xColor _innerEndColor; - xColor _outerStartColor; - xColor _outerEndColor; - float _innerStartAlpha; - float _innerEndAlpha; - float _outerStartAlpha; - float _outerEndAlpha; + xColor _innerStartColor { DEFAULT_OVERLAY_COLOR }; + xColor _innerEndColor { DEFAULT_OVERLAY_COLOR }; + xColor _outerStartColor { DEFAULT_OVERLAY_COLOR }; + xColor _outerEndColor { DEFAULT_OVERLAY_COLOR }; + float _innerStartAlpha { DEFAULT_ALPHA }; + float _innerEndAlpha { DEFAULT_ALPHA }; + float _outerStartAlpha { DEFAULT_ALPHA }; + float _outerEndAlpha { DEFAULT_ALPHA }; bool _hasTickMarks { false }; float _majorTickMarksAngle { 0 }; float _minorTickMarksAngle { 0 }; float _majorTickMarksLength { 0 }; float _minorTickMarksLength { 0 }; - xColor _majorTickMarksColor; - xColor _minorTickMarksColor; + xColor _majorTickMarksColor { DEFAULT_OVERLAY_COLOR }; + xColor _minorTickMarksColor { DEFAULT_OVERLAY_COLOR }; gpu::Primitive _solidPrimitive { gpu::TRIANGLE_FAN }; int _quadVerticesID { 0 }; int _lineVerticesID { 0 }; diff --git a/interface/src/ui/overlays/Overlay.cpp b/interface/src/ui/overlays/Overlay.cpp index 01ad56f20e..e6b1eb2ebf 100644 --- a/interface/src/ui/overlays/Overlay.cpp +++ b/interface/src/ui/overlays/Overlay.cpp @@ -15,8 +15,8 @@ #include "Application.h" -static const xColor DEFAULT_OVERLAY_COLOR = { 255, 255, 255 }; -static const float DEFAULT_ALPHA = 0.7f; +const xColor Overlay::DEFAULT_OVERLAY_COLOR = { 255, 255, 255 }; +const float Overlay::DEFAULT_ALPHA = 0.7f; Overlay::Overlay() : _renderItemID(render::Item::INVALID_ITEM_ID), diff --git a/interface/src/ui/overlays/Overlay.h b/interface/src/ui/overlays/Overlay.h index 806fc1aa14..9b07f24600 100644 --- a/interface/src/ui/overlays/Overlay.h +++ b/interface/src/ui/overlays/Overlay.h @@ -122,6 +122,9 @@ protected: unsigned int _stackOrder { 0 }; + static const xColor DEFAULT_OVERLAY_COLOR; + static const float DEFAULT_ALPHA; + private: OverlayID _overlayID; // only used for non-3d overlays }; diff --git a/interface/src/ui/overlays/Planar3DOverlay.h b/interface/src/ui/overlays/Planar3DOverlay.h index 1360cccfc2..0a0e75696e 100644 --- a/interface/src/ui/overlays/Planar3DOverlay.h +++ b/interface/src/ui/overlays/Planar3DOverlay.h @@ -27,8 +27,8 @@ public: void setDimensions(float value) { setDimensions(glm::vec2(value)); } void setDimensions(const glm::vec2& value); - void setProperties(const QVariantMap& properties) override; - QVariant getProperty(const QString& property) override; + virtual void setProperties(const QVariantMap& properties) override; + virtual QVariant getProperty(const QString& property) override; virtual bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face, glm::vec3& surfaceNormal) override;