[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    =?utf-8?q?=5Bcalligra=5D_krita/plugins/filters/phongbumpmap=3A_I?=
From:       José_Luis_Vergara <pentalis () gmail ! com>
Date:       2011-06-30 20:39:10
Message-ID: 20110630203910.61ADAA60D2 () git ! kde ! org
[Download RAW message or body]

Git commit 7104d5f8d92ad3be8f3f5c87d82f93b37ec6e537 by José Luis Vergara.
Committed on 30/06/2011 at 22:21.
Pushed by jlvergara into branch 'master'.

Implement basic progress updater, solve memory leak

M  +29   -15   krita/plugins/filters/phongbumpmap/kis_phong_bumpmap_filter.cpp     

http://commits.kde.org/calligra/7104d5f8d92ad3be8f3f5c87d82f93b37ec6e537

diff --git a/krita/plugins/filters/phongbumpmap/kis_phong_bumpmap_filter.cpp \
b/krita/plugins/filters/phongbumpmap/kis_phong_bumpmap_filter.cpp index \
                6972750..b5a8159 100644
--- a/krita/plugins/filters/phongbumpmap/kis_phong_bumpmap_filter.cpp
+++ b/krita/plugins/filters/phongbumpmap/kis_phong_bumpmap_filter.cpp
@@ -22,10 +22,13 @@
 
 #include "kis_paint_device.h"
 #include "kis_config_widget.h"
+#include "KoUpdater.h"
 #include "kis_math_toolbox.h"
 #include "KoColorSpaceRegistry.h"
 #include <filter/kis_filter_configuration.h>
 #include "kis_iterator_ng.h"
+#include "kundo2command.h"
+#include "kis_painter.h"
 
 KisFilterPhongBumpmap::KisFilterPhongBumpmap()
                       : KisFilter(KoID("phongbumpmap"     , i18n("PhongBumpmap")),
@@ -38,17 +41,15 @@ KisFilterPhongBumpmap::KisFilterPhongBumpmap()
 
 void KisFilterPhongBumpmap::process(KisPaintDeviceSP device,
                                     const QRect& applyRect,
-                                    const KisFilterConfiguration* config,
-                                    KoUpdater* /*progressUpdater*/
+                                    const KisFilterConfiguration *config,
+                                    KoUpdater *progressUpdater
                                     ) const
-{
-#ifdef __GNUC__
-    #warning TODO: implement progress updater for phong bumpmap
-#endif
-
+{    
+    if (progressUpdater) progressUpdater->setProgress(0);
+    
     // Benchmark
     QTime timer, timerE;
-
+    
     QString userChosenHeightChannel = config->getString(PHONG_HEIGHT_CHANNEL, \
"FAIL");  
     if (userChosenHeightChannel == "FAIL") {
@@ -61,7 +62,7 @@ void KisFilterPhongBumpmap::process(KisPaintDeviceSP device,
     
     timer.start();
 
-    KoChannelInfo* m_heightChannel = 0;
+    KoChannelInfo *m_heightChannel = 0;
 
     foreach (KoChannelInfo* channel, device->colorSpace()->channels()) {
         if (userChosenHeightChannel == channel->name()) {
@@ -80,6 +81,8 @@ void KisFilterPhongBumpmap::process(KisPaintDeviceSP device,
     QRect tileLimits;
     QColor I; //Reflected light
 
+    if (progressUpdater) progressUpdater->setProgress(1);
+
     //======Preparation paraphlenalia=======
 
     //Hardcoded facts about Phong Bumpmap: it _will_ generate an RGBA16 bumpmap
@@ -88,12 +91,13 @@ void KisFilterPhongBumpmap::process(KisPaintDeviceSP device,
     const quint32   pixelsOfOutputArea       = abs(outputArea.width() * \
                outputArea.height());
     const quint8    pixelSize                = BYTE_DEPTH_OF_BUMPMAP * \
                CHANNEL_COUNT_OF_BUMPMAP;
     const quint32   bytesToFillBumpmapArea   = pixelsOfOutputArea * pixelSize;
-
     QVector<quint8> bumpmap(bytesToFillBumpmapArea);
     quint8         *bumpmapDataPointer       = bumpmap.data();
     quint32         ki                       = m_heightChannel->index();
     PhongPixelProcessor tileRenderer(config);
 
+    if (progressUpdater) progressUpdater->setProgress(2);
+
     //===============RENDER=================
     
     QVector<PtrToDouble> toDoubleFuncPtr(device->colorSpace()->channels().count());
@@ -108,7 +112,6 @@ void KisFilterPhongBumpmap::process(KisPaintDeviceSP device,
                                              inputArea.y(),
                                              inputArea.width()
                                              );
-    curPixel = 0;
     
     for (qint32 srcRow = 0; srcRow < inputArea.height(); ++srcRow) {
         do {
@@ -120,6 +123,8 @@ void KisFilterPhongBumpmap::process(KisPaintDeviceSP device,
         iterator->nextRow();
     }
 
+    if (progressUpdater) progressUpdater->setProgress(50);
+
     const int tileHeightMinus1 = inputArea.width() - 1;
     const int tileWidthMinus1 = inputArea.height() - 1;
 
@@ -138,10 +143,19 @@ void KisFilterPhongBumpmap::process(KisPaintDeviceSP device,
         }
     }
 
+    if (progressUpdater) progressUpdater->setProgress(90);
+    
     KisPaintDeviceSP bumpmapPaintDevice = new \
                KisPaintDevice(KoColorSpaceRegistry::instance()->rgb16());
     bumpmapPaintDevice->writeBytes(bumpmap.data(), outputArea.x(), outputArea.y(), \
                outputArea.width(), outputArea.height());
-    bumpmapPaintDevice->convertTo(device->colorSpace());
-    device->makeCloneFrom(bumpmapPaintDevice, bumpmapPaintDevice->extent());  // \
THIS COULD BE BUG GY +    KUndo2Command *leaker = \
bumpmapPaintDevice->convertTo(device->colorSpace()); +    KisPainter copier(device);
+    copier.bitBlt(outputArea.x(), outputArea.y(), bumpmapPaintDevice,
+                  outputArea.x(), outputArea.y(), outputArea.width(), \
outputArea.height()); +    //device->prepareClone(bumpmapPaintDevice);
+    //device->makeCloneFrom(bumpmapPaintDevice, bumpmapPaintDevice->extent());  // \
THIS COULD BE BUG GY +    
+    delete leaker;
+    if (progressUpdater) progressUpdater->setProgress(100);
 }
 
 KisFilterConfiguration *KisFilterPhongBumpmap::factoryConfiguration(const \
KisPaintDeviceSP) const @@ -152,12 +166,12 @@ KisFilterConfiguration \
*KisFilterPhongBumpmap::factoryConfiguration(const KisPai  
 QRect KisFilterPhongBumpmap::neededRect(const QRect &rect, const \
KisFilterConfiguration* /*config*/) const  {
-    return rect.adjusted(-2, -2, 2, 2);
+    return rect.adjusted(-1, -1, 1, 1);
 }
 
 QRect KisFilterPhongBumpmap::changedRect(const QRect &rect, const \
KisFilterConfiguration* /*config*/) const  {
-    return rect.adjusted(-2, -2, 2, 2);
+    return rect.adjusted(-1, -1, 1, 1);
 }
 
 KisConfigWidget *KisFilterPhongBumpmap::createConfigurationWidget(QWidget *parent, \
const KisPaintDeviceSP dev, const KisImageWSP image) const


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic