From c5f2b3b5885fd675f0f223c882b555154078aa7a Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 25 Nov 2014 12:05:13 -0800 Subject: [PATCH] Add borderSize to Cube3DOverlay --- interface/src/ui/overlays/Cube3DOverlay.cpp | 42 +++++++++++++++++++-- interface/src/ui/overlays/Cube3DOverlay.h | 10 +++++ 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/interface/src/ui/overlays/Cube3DOverlay.cpp b/interface/src/ui/overlays/Cube3DOverlay.cpp index 9c478c4465..223a695328 100644 --- a/interface/src/ui/overlays/Cube3DOverlay.cpp +++ b/interface/src/ui/overlays/Cube3DOverlay.cpp @@ -19,7 +19,7 @@ #include "Cube3DOverlay.h" #include "renderer/GlowEffect.h" -Cube3DOverlay::Cube3DOverlay() { +Cube3DOverlay::Cube3DOverlay() : _borderSize(0) { } Cube3DOverlay::Cube3DOverlay(const Cube3DOverlay* cube3DOverlay) : @@ -63,8 +63,25 @@ void Cube3DOverlay::render(RenderArgs* args) { glm::vec3 positionToCenter = center - position; glTranslatef(positionToCenter.x, positionToCenter.y, positionToCenter.z); if (_isSolid) { - glScalef(dimensions.x, dimensions.y, dimensions.z); - Application::getInstance()->getDeferredLightingEffect()->renderSolidCube(1.0f); + if (_borderSize > 0) { + // Disable writing to the depth mask so that the following draw + // will not be occluded by this one. This means the border + // could be covered by overlays that are further back and drawn + // later, but this is good enough for the use-case. + glDepthMask(GL_FALSE); + glPushMatrix(); + glColor4f(MAX_COLOR, MAX_COLOR, MAX_COLOR, 1.0f); + glScalef(dimensions.x * _borderSize, dimensions.y * _borderSize, dimensions.z * _borderSize); + Application::getInstance()->getDeferredLightingEffect()->renderSolidCube(1.0f); + glPopMatrix(); + glDepthMask(GL_TRUE); + } + + glPushMatrix(); + glColor4f(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha); + glScalef(dimensions.x, dimensions.y, dimensions.z); + Application::getInstance()->getDeferredLightingEffect()->renderSolidCube(1.0f); + glPopMatrix(); } else { glLineWidth(_lineWidth); @@ -111,3 +128,22 @@ void Cube3DOverlay::render(RenderArgs* args) { Cube3DOverlay* Cube3DOverlay::createClone() const { return new Cube3DOverlay(this); } + +void Cube3DOverlay::setProperties(const QScriptValue& properties) { + Volume3DOverlay::setProperties(properties); + + QScriptValue borderSize = properties.property("borderSize"); + + if (borderSize.isValid()) { + float value = borderSize.toVariant().toFloat(); + setBorderSize(value); + } +} + +QScriptValue Cube3DOverlay::getProperty(const QString& property) { + if (property == "borderSize") { + return _borderSize; + } + + return Volume3DOverlay::getProperty(property); +} diff --git a/interface/src/ui/overlays/Cube3DOverlay.h b/interface/src/ui/overlays/Cube3DOverlay.h index 9c199f2b7b..16705a9c71 100644 --- a/interface/src/ui/overlays/Cube3DOverlay.h +++ b/interface/src/ui/overlays/Cube3DOverlay.h @@ -23,6 +23,16 @@ public: virtual void render(RenderArgs* args); virtual Cube3DOverlay* createClone() const; + + float getBorderSize() const { return _borderSize; } + + void setBorderSize(float value) { _borderSize = value; } + + virtual void setProperties(const QScriptValue& properties); + virtual QScriptValue getProperty(const QString& property); + +private: + float _borderSize; };