From aac98e8699112671b38c446d96e297d523b018ca Mon Sep 17 00:00:00 2001 From: josh Date: Thu, 13 Nov 2008 19:23:30 +0000 Subject: [PATCH] added a LightBounceBoxComparator to order logos by distance from viewer git-svn-id: svn://anubis/dwscr/trunk@102 5bef9df8-b654-44bb-925b-0ff18baa8f8c --- ss/LightBounce.cc | 9 +++++++++ ss/LightBounce.h | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/ss/LightBounce.cc b/ss/LightBounce.cc index c635732..16bf526 100644 --- a/ss/LightBounce.cc +++ b/ss/LightBounce.cc @@ -52,6 +52,13 @@ void LightBounceBox::updateDist(float x, float y, float z) this->dist = (dx*dx) + (dy*dy) + (dz*dz); } + +bool LightBounceBoxComparator::operator()(LightBounceBox * l1, LightBounceBox * l2) +{ + return l1->getDist() > l2->getDist(); +} + + /* construct screensaver mode and do some basic OpenGL setup */ LightBounce::LightBounce(SSMain * _SSMain) : SSMode(_SSMain) { @@ -112,6 +119,7 @@ LightBounce::LightBounce(SSMain * _SSMain) : SSMode(_SSMain) } glPushAttrib(GL_POLYGON_BIT); /* store CULL_FACE settings */ +// glEnable(GL_BLEND); } LightBounce::~LightBounce() @@ -142,6 +150,7 @@ void LightBounce::update() { m_boxes[i]->updateDist(viewer_x, viewer_y, viewer_z); } + sort(m_boxes.begin(), m_boxes.end(), m_comparator); for (int i = 0; i < numMonitors; i++) { diff --git a/ss/LightBounce.h b/ss/LightBounce.h index 35dd995..64c17c4 100644 --- a/ss/LightBounce.h +++ b/ss/LightBounce.h @@ -21,6 +21,7 @@ public: ~LightBounceBox(); void draw() { glCallList(m_dl); } void updateDist(float x, float y, float z); + float getDist() { return dist; } private: float x; @@ -34,6 +35,12 @@ private: GLuint m_dl; }; +class LightBounceBoxComparator +{ + public: + bool operator()(LightBounceBox * l1, LightBounceBox * l2); +}; + class LightBounce : public SSMode { public: @@ -41,6 +48,7 @@ public: ~LightBounce(); void update(); protected: + LightBounceBoxComparator m_comparator; vector m_boxes; LogoBox m_logoBox; };