[gegl] gegl_buffer_sample: recreate the sampler if format changes



commit 166c6d3800dcab9eb27f4472c3942d2adf5d5a6e
Author: �yvind Kolås <pippin gimp org>
Date:   Sat Jan 30 14:10:53 2010 +0000

    gegl_buffer_sample: recreate the sampler if format changes
    
    If samplings were done on the same buffer using different formats,
    the first format would always be expected, potentially overrunning
    memory.

 gegl/buffer/gegl-buffer-access.c  |    7 +++++--
 gegl/buffer/gegl-buffer-private.h |    1 +
 2 files changed, 6 insertions(+), 2 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
index 3f3d367..25c8b00 100644
--- a/gegl/buffer/gegl-buffer-access.c
+++ b/gegl/buffer/gegl-buffer-access.c
@@ -1095,10 +1095,13 @@ gegl_buffer_sample (GeglBuffer       *buffer,
 
   desired_type = gegl_sampler_type_from_interpolation (interpolation);
 
+  /* unset the cached sampler if it dosn't match the needs */
   if (buffer->sampler != NULL &&
-      !G_TYPE_CHECK_INSTANCE_TYPE (buffer->sampler, desired_type))
+     (!G_TYPE_CHECK_INSTANCE_TYPE (buffer->sampler, desired_type) || 
+       buffer->sampler_format != format
+      ))
     {
-      g_object_unref(buffer->sampler);
+      g_object_unref (buffer->sampler);
       buffer->sampler = NULL;
     }
 
diff --git a/gegl/buffer/gegl-buffer-private.h b/gegl/buffer/gegl-buffer-private.h
index 1f55193..4d626fd 100644
--- a/gegl/buffer/gegl-buffer-private.h
+++ b/gegl/buffer/gegl-buffer-private.h
@@ -53,6 +53,7 @@ struct _GeglBuffer
   GeglSampler      *sampler; /* cached sampler for speeding up random
                                 access interpolated fetches from the
                                 buffer */
+  Babl             *sampler_format; /* the format of the cached sampler */
 
   GeglTileStorage  *tile_storage;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]