[gegl] buffer: handle uninitialized buffers in gegl_buffer_clear()
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] buffer: handle uninitialized buffers in gegl_buffer_clear()
- Date: Wed, 6 May 2020 09:18:53 +0000 (UTC)
commit 31649e05d6670c8bb8a69ce7b820c79889596cc6
Author: Ell <ell_se yahoo com>
Date: Wed May 6 11:52:56 2020 +0300
buffer: handle uninitialized buffers in gegl_buffer_clear()
When calling gegl_buffer_clear() on an uninitialized buffer, fill
tile-aligned regions with explicitly-created empty tiles, instead
of voiding the region and relying on the tiles to be created on-
demand, so that the region is zero-initialized, instead of
uninitialized.
gegl/buffer/gegl-buffer-access.c | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
index 79cfc31cb..ad4b54c40 100644
--- a/gegl/buffer/gegl-buffer-access.c
+++ b/gegl/buffer/gegl-buffer-access.c
@@ -2793,11 +2793,26 @@ gegl_buffer_clear_tile (GeglBuffer *dst,
gint tile_y,
gpointer data)
{
- gegl_tile_handler_cache_remove (dst->tile_storage->cache,
- tile_x, tile_y, 0);
+ if (dst->initialized)
+ {
+ gegl_tile_handler_cache_remove (dst->tile_storage->cache,
+ tile_x, tile_y, 0);
- gegl_tile_handler_source_command (dst->tile_storage->cache, GEGL_TILE_VOID,
- tile_x, tile_y, 0, NULL);
+ gegl_tile_handler_source_command (dst->tile_storage->cache,
+ GEGL_TILE_VOID,
+ tile_x, tile_y, 0, NULL);
+ }
+ else
+ {
+ GeglTile *tile;
+
+ tile = gegl_tile_handler_empty_new_tile (dst->tile_storage->tile_size);
+
+ gegl_tile_handler_cache_insert (dst->tile_storage->cache, tile,
+ tile_x, tile_y, 0);
+
+ gegl_tile_unref (tile);
+ }
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]