From kde-commits Fri Aug 07 17:59:43 2009 From: Rivo Laks Date: Fri, 07 Aug 2009 17:59:43 +0000 To: kde-commits Subject: playground/libs/kgllib/extras/kgllib Message-Id: <1249667983.175850.28590.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=124966799004904 SVN commit 1008524 by rivol: - Clear the scene renderbuffer if automatic clearing is turned on. - Add range for automatic exposure calculation: the exposure will change only in the given range and won't get too small/big. M +13 -3 hdrglwidget.cpp M +5 -0 hdrglwidget.h --- trunk/playground/libs/kgllib/extras/kgllib/hdrglwidget.cpp #1008523:1008524 @@ -75,6 +75,8 @@ mAutoExposure = false; mAutoExposureTarget = 0.3; mAutoExposureSpeed = 0.5; + mAutoExposureMin = 0.25; + mAutoExposureMax = 4.0; mBloomEnabled = true; mBloomAfterTonemapping = false; mBloomDownsize = 2; @@ -173,8 +175,6 @@ void HdrGLWidget::render() { - GLWidget::render(); - // If HDR rendering isn't active, just render the scene as usual and return if (!hdrRenderingActive()) { renderScene(); @@ -187,6 +187,15 @@ mSceneRenderTarget = new RenderTarget(width(), height(), true, GL_RGBA16F_ARB); } activateRenderTarget(mSceneRenderTarget); + if (automaticClear()) { + setClearColor(clearColor()); + if (context()->format().depth()) { + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + } else { + glClear(GL_COLOR_BUFFER_BIT); + } + } + renderScene(); deactivateRenderTarget(mSceneRenderTarget); @@ -278,7 +287,8 @@ // Set exposure float targetexposure = mAutoExposureTarget / avgluminance; float oldc = powf(mAutoExposureSpeed, fpsCounter()->timeElapsed()); - setExposure(exposure() * oldc + targetexposure * (1-oldc)); + float e = exposure() * oldc + targetexposure * (1-oldc); + setExposure(qBound(mAutoExposureMin, e, mAutoExposureMax)); // Clean up delete[] buffer; --- trunk/playground/libs/kgllib/extras/kgllib/hdrglwidget.h #1008523:1008524 @@ -61,6 +61,8 @@ float autoExposureSpeed() const { return mAutoExposureSpeed; } float autoExposureTarget() const { return mAutoExposureTarget; } + float autoExposureMin() const { return mAutoExposureMin; } + float autoExposureMax() const { return mAutoExposureMax; } bool bloomEnabled() const { return mBloomEnabled; } @@ -106,6 +108,7 @@ void setAutoExposureSpeed(float s) { mAutoExposureSpeed = s; } void setAutoExposureTarget(float t) { mAutoExposureTarget = t; } + void setAutoExposureRange(float a, float b) { mAutoExposureMin = a; mAutoExposureMax = b; } void setBloomEnabled(bool e) { mBloomEnabled = e; } void setBloomAfterTonemapping(bool e) { mBloomAfterTonemapping = e; } @@ -151,6 +154,8 @@ bool mAutoExposure; float mAutoExposureSpeed; float mAutoExposureTarget; + float mAutoExposureMin; + float mAutoExposureMax; bool mBloomEnabled; bool mBloomAfterTonemapping; int mBloomDownsize;