From eeec9f25018827941b79f8b658615eb40cc0bf8c Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Thu, 21 Feb 2008 10:38:19 +0000 Subject: * convert to non-premultiplied alpha on fedisplacementmap * corrected a slight mistake on a comment (!) on fecolormatrix :-P (bzr r4805) --- src/display/nr-filter-colormatrix.cpp | 2 +- src/display/nr-filter-displacement-map.cpp | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/display/nr-filter-colormatrix.cpp b/src/display/nr-filter-colormatrix.cpp index 51017ab02..054b3899b 100644 --- a/src/display/nr-filter-colormatrix.cpp +++ b/src/display/nr-filter-colormatrix.cpp @@ -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; diff --git a/src/display/nr-filter-displacement-map.cpp b/src/display/nr-filter-displacement-map.cpp index 5d454e6cd..1345924fc 100644 --- a/src/display/nr-filter-displacement-map.cpp +++ b/src/display/nr-filter-displacement-map.cpp @@ -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); -- cgit v1.2.3