[gegl] gegl_buffer_sample: recreate the sampler if format changes
- From: Øyvind Kolås <ok src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gegl] gegl_buffer_sample: recreate the sampler if format changes
- Date: Sat, 30 Jan 2010 14:09:14 +0000 (UTC)
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]