On Thursday, 5 Apr 2001, Georg Acher wrote:
> I just looked into bumpmap.c and tried to figure out if it can profit from
> blocking and played a bit with the code. It seems that there is some major
> (performance) problem with the gimp_pixel_rgn_get/set_row-calls in Gimp
> 1.2.1.
>
> The original bumpmap took for my 1400*1400 image about 30s, when I commented
> out one of the gimp_pixel_rgn_get/set_row() that access the source or the
> destination image, the whole stuff took only about 2.4s, while the
> calculations were still done!
>
> I experimented a bit, and found out, that apparently the "switch" between
> get and set seems to be the problem. I changed the code to get 32 rows,
> calculate them and the write the 32 back. It took only 3s overall, the
> resulting image is the same as with the 30s boiling time.
Have a look at the gimp_pixel_rgns_register() and
gimp_pixel_rgns_process() functions. They do similar blocking on a
per-tile basis.
Most plugins should be using them, but ones with more complex access
patterns (eg accessing pixels across tile boundaries) probably won't.'
Typical use is something like this:
gimp_drawable_mask_bounds (drawable->id, &x1, &y1, &x2, &y2);
for (y = y1; y < y2; y += tile_width - (y % tile_width))
{
for (x = x1; x < x2; x += tile_width - (x % tile_width))
{
/* process the image in tile-sized regions */
for (pr = gimp_pixel_rgns_register (2, &src_rgn, &dest_rgn);
pr != NULL;
pr = gimp_pixel_rgns_process (pr))
{
src_row = src_rgn.data;
dest_row = dest_rgn.data;
for (row = 0; row < src_rgn.h; row++)
{
src = src_row;
dest = dest_row;
for (col = 0; col < src_rgn.w; col++)
{
/* do stuff with src[0..bpp] and dest[0..bpp] */
src += src_rgn.bpp;
dest += dest_rgn.bpp;
}
src_row += src_rgn.rowstride;
dest_row += dest_rgn.rowstride;
}
}
}
}
Of course this precise form will only work where there's a one-to-one
correspondence between input and output pixels. I suspect whirl-pinch
has more complex access patterns, in which case you'll need to be more
creative with the loop structure.
Austin
_______________________________________________
Gimp-developer mailing list
[EMAIL PROTECTED]
http://lists.xcf.berkeley.edu/mailman/listinfo/gimp-developer