CVS commit by eros: Euphoria cumulative patch. Fixes the "white bg" bug, some mem leaks, more precise timings and minor things. CCMAIL: 57429-done@bugs.kde.org M +23 -13 Euphoria.cpp 1.9 M +1 -1 Euphoria.h 1.3 --- kdeartwork/kscreensaver/kdesavers/Euphoria.cpp #1.8:1.9 @@ -46,10 +46,10 @@ -// Returns the system time, in milliseconds. -long timeGetTime() +// Returns the system time, in seconds. +double timeGetTime() { struct timeval tp; gettimeofday( &tp, 0 ); - return (tp.tv_sec * 1000) + (tp.tv_usec / 1000); + return (double)tp.tv_sec + (double)tp.tv_usec / 1000000; } @@ -459,5 +459,6 @@ void wisp::drawAsBackground() EuphoriaWidget::EuphoriaWidget( QWidget* parent, const char* name ) - : QGLWidget(parent, name), _wisps(0), _backwisps(0) + : QGLWidget(parent, name), texName(0), _wisps(0), _backwisps(0), + feedbackmap(0), feedbacktex(0) { setDefaults( Regular ); @@ -472,4 +473,8 @@ EuphoriaWidget::~EuphoriaWidget() { // Free memory + if ( texName ) + glDeleteTextures( 1, &texName ); + if ( feedbacktex ) + glDeleteTextures( 1, &feedbacktex ); delete[] _wisps; delete[] _backwisps; @@ -480,13 +485,9 @@ void EuphoriaWidget::paintGL() { int i; - static long thisTime = timeGetTime(), lastTime; + static double lastTime = timeGetTime(); // update time - lastTime = thisTime; - thisTime = timeGetTime(); - if(thisTime >= lastTime) - elapsedTime = float(thisTime - lastTime) * 0.001f; - // else use elapsedTime from last frame - + elapsedTime = timeGetTime() - lastTime; + lastTime += elapsedTime; _ec = this; @@ -501,5 +502,5 @@ void EuphoriaWidget::paintGL() if(dFeedback) { - static float feedbackIntensity = float(dFeedback) / 101.0f; + float feedbackIntensity = float(dFeedback) / 101.0f; // update feedback variables @@ -625,5 +626,7 @@ void EuphoriaWidget::resizeGL( int w, in void EuphoriaWidget::initializeGL() { - //resizeGL( width(), height() ); + // Need to call this to setup viewport[] parameters used in + // the next updateParameters() call + resizeGL( width(), height() ); updateParameters(); @@ -707,4 +710,7 @@ void EuphoriaWidget::updateParameters() gluBuild2DMipmaps(GL_TEXTURE_2D, 1, TEXSIZE, TEXSIZE, GL_LUMINANCE, GL_UNSIGNED_BYTE, linesmap); } + } else if ( texName ) { + glDeleteTextures( 1, &texName ); + texName = 0; } @@ -719,4 +725,5 @@ void EuphoriaWidget::updateParameters() // feedback texture setup glEnable(GL_TEXTURE_2D); + delete [] feedbackmap; feedbackmap = new unsigned char[feedbacktexsize*feedbacktexsize*3]; glGenTextures(1, &feedbacktex); @@ -736,4 +743,7 @@ void EuphoriaWidget::updateParameters() lv[1] = float(dFeedbackspeed) * (myRandf(0.0025f) + 0.0025f); lv[2] = float(dFeedbackspeed) * (myRandf(0.0025f) + 0.0025f); + } else if ( feedbacktex ) { + glDeleteTextures( 1, &feedbacktex ); + feedbacktex = 0; } --- kdeartwork/kscreensaver/kdesavers/Euphoria.h #1.2:1.3 @@ -65,5 +65,5 @@ private: float aspectRatio; int viewport[4]; - float elapsedTime; + double elapsedTime; // feedback texture object