diff --git a/dwss.cc b/dwss.cc index 89d4f66..c8e259f 100644 --- a/dwss.cc +++ b/dwss.cc @@ -35,6 +35,7 @@ int main (int argc, char *argv[]) GnomeScreensaver gs(&argc, &argv, configure, expose, update, 12); Mode *modes[] = { + new Starfield(), new Spin(), new Flip() }; diff --git a/modes/Starfield.cc b/modes/Starfield.cc new file mode 100644 index 0000000..2f3354b --- /dev/null +++ b/modes/Starfield.cc @@ -0,0 +1,67 @@ + +#include +#include +#include +#include +#include + +#include +#include + +#include "Starfield.h" + +Starfield::Starfield() +{ + m_last_ticks = 0; + srand(time(NULL) + getpid()); +} + +Starfield::~Starfield() +{ +} + +bool Starfield::expose (GnomeScreensaver & gs) +{ + if (m_last_ticks == 0) + m_last_ticks = gs.getTicks(); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glViewport(0, 0, gs.getWidth(), gs.getHeight()); + + glPushMatrix(); + glTranslatef(0, 0, -30); + m_logobox.draw(); + glPopMatrix(); + + m_last_ticks = gs.getTicks(); + + return true; +} + +bool Starfield::configure (GnomeScreensaver & gs) +{ + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(60.0, gs.getAspectRatio(), 0.01, 1000.0); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + gluLookAt(0, 0, 0, 0, 0, -1, 0, 1, 0); + + return true; +} + +bool Starfield::update (GnomeScreensaver & gs) +{ + return true; +} + +void Starfield::getRandomAxis(float (*axis)[3]) +{ + double alpha = rand() / (double)RAND_MAX * 2.0 * M_PI; + double beta = rand() / (double)RAND_MAX * M_PI; + (*axis)[0] = cos(alpha) * sin(beta); + (*axis)[1] = sin(alpha) * sin(beta); + (*axis)[2] = cos(beta); +} + diff --git a/modes/Starfield.h b/modes/Starfield.h new file mode 100644 index 0000000..5ee0c97 --- /dev/null +++ b/modes/Starfield.h @@ -0,0 +1,24 @@ + +#ifndef STARFIELD_H +#define STARFIELD_H + +#include "LogoBox.h" +#include "Mode.h" +#include "GnomeScreensaver.h" + +class Starfield : public Mode +{ + public: + Starfield(); + ~Starfield(); + bool expose (GnomeScreensaver & gs); + bool configure (GnomeScreensaver & gs); + bool update (GnomeScreensaver & gs); + protected: + LogoBox m_logobox; + uint64_t m_last_ticks; + void getRandomAxis(float (*axis)[3]); +}; + +#endif /* STARFIELD_H */ +