[gegl] buffer: avoid typecheck in gegl_buffer_sample



commit 33722ad5b8377323e241c1a8e8aa79a21a155f16
Author: Øyvind Kolås <pippin gimp org>
Date:   Fri Jun 20 07:42:33 2014 +0200

    buffer: avoid typecheck in gegl_buffer_sample

 gegl/buffer/gegl-buffer-private.h |    1 +
 gegl/buffer/gegl-sampler.c        |    9 ++++++---
 2 files changed, 7 insertions(+), 3 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-private.h b/gegl/buffer/gegl-buffer-private.h
index b056f56..557bbb7 100644
--- a/gegl/buffer/gegl-buffer-private.h
+++ b/gegl/buffer/gegl-buffer-private.h
@@ -57,6 +57,7 @@ struct _GeglBuffer
   GeglSampler      *sampler; /* cached sampler for speeding up random
                                 access interpolated fetches from the
                                 buffer */
+  GeglSamplerType   sampler_type;
   const Babl       *sampler_format; /* the format of the cached sampler */
 
   GeglTileStorage  *tile_storage;
diff --git a/gegl/buffer/gegl-sampler.c b/gegl/buffer/gegl-sampler.c
index f929817..bebdd1b 100644
--- a/gegl/buffer/gegl-sampler.c
+++ b/gegl/buffer/gegl-sampler.c
@@ -478,12 +478,13 @@ gegl_buffer_sample (GeglBuffer       *buffer,
                     GeglAbyssPolicy   repeat_mode)
 {
   GType desired_type;
+  /*
   if (sampler_type == GEGL_SAMPLER_NEAREST && format == buffer->soft_format)
   {
     GeglRectangle rect = {floorf (x), floorf(y), 1, 1};
     gegl_buffer_get (buffer, &rect, 1, NULL, dest, GEGL_AUTO_ROWSTRIDE, repeat_mode);
     return;
-  }
+  }*/
 
   if (!format)
     format = buffer->soft_format;
@@ -494,21 +495,23 @@ gegl_buffer_sample (GeglBuffer       *buffer,
     gegl_buffer_cl_cache_flush (buffer, &rect);
   }
 
-  desired_type = gegl_sampler_gtype_from_enum (sampler_type);
 
   /* unset the cached sampler if it dosn't match the needs */
   if (buffer->sampler != NULL &&
-     (!G_TYPE_CHECK_INSTANCE_TYPE (buffer->sampler, desired_type) ||
+     (buffer->sampler_type != sampler_type ||
        buffer->sampler_format != format
       ))
     {
       g_object_unref (buffer->sampler);
       buffer->sampler = NULL;
+      buffer->sampler_type = 0;
     }
 
   /* look up appropriate sampler,. */
   if (buffer->sampler == NULL)
     {
+      desired_type = gegl_sampler_gtype_from_enum (sampler_type);
+      buffer->sampler_type = sampler_type;
       buffer->sampler = g_object_new (desired_type,
                                       "buffer", buffer,
                                       "format", format,


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