]> git.tokkee.org Git - inkscape.git/commitdiff

Code

* convert to non-premultiplied alpha on fedisplacementmap
authorjucablues <jucablues@users.sourceforge.net>
Thu, 21 Feb 2008 10:38:19 +0000 (10:38 +0000)
committerjucablues <jucablues@users.sourceforge.net>
Thu, 21 Feb 2008 10:38:19 +0000 (10:38 +0000)
* corrected a slight mistake on a comment (!) on fecolormatrix :-P

src/display/nr-filter-colormatrix.cpp
src/display/nr-filter-displacement-map.cpp

index 51017ab029cd8b873b00c51a0e4f9c7fbebde14a..054b3899b41171a84156539a208a82995ca96def 100644 (file)
@@ -42,7 +42,7 @@ int FilterColorMatrix::render(FilterSlot &slot, FilterUnits const &/*units*/) {
                            true);
 
     // this primitive is defined for non-premultiplied RGBA values,
-    // thus convert them to that format before blending
+    // thus convert them to that format
     if (in->mode != NR_PIXBLOCK_MODE_R8G8B8A8N) {
         NRPixBlock *original_in = in;
         in = new NRPixBlock;
index 5d454e6cdd5fd87cbb1500f923a27f236d9a9dff..1345924fcd0057a2a29c93aa5ce32060477e9997 100644 (file)
@@ -12,6 +12,7 @@
 #include "display/nr-filter-displacement-map.h"
 #include "display/nr-filter-types.h"
 #include "display/nr-filter-units.h"
+#include "libnr/nr-blit.h"
 #include "libnr/nr-pixops.h"
 
 namespace NR {
@@ -58,7 +59,19 @@ int FilterDisplacementMap::render(FilterSlot &slot, FilterUnits const &units) {
     out->area.x1 = out_x0 + out_w;
     out->area.y1 = out_y0 + out_h;
 
-    nr_pixblock_setup_fast(out, map->mode, out->area.x0, out->area.y0, out->area.x1, out->area.y1, true);
+    nr_pixblock_setup_fast(out, texture->mode, out->area.x0, out->area.y0, out->area.x1, out->area.y1, true);
+
+    // this primitive is defined for non-premultiplied RGBA values,
+    // thus convert them to that format
+    if (map->mode != NR_PIXBLOCK_MODE_R8G8B8A8N) {
+        NRPixBlock *original_map = map;
+        map = new NRPixBlock;
+        nr_pixblock_setup_fast(map, NR_PIXBLOCK_MODE_R8G8B8A8N,
+                               original_map->area.x0, original_map->area.y0,
+                               original_map->area.x1, original_map->area.y1,
+                               false);
+        nr_blit_pixblock_pixblock(map, original_map);
+    }
 
     unsigned char *map_data = NR_PIXBLOCK_PX(map);
     unsigned char *texture_data = NR_PIXBLOCK_PX(texture);