[gegl/gsoc2009-gpu: 6/15] Adjust gegl_tile_new() params and update all references to it



commit c39364d47c73d20ba08c12faf043a40865429c72
Author: Jerson Michael Perpetua <jersonperpetua gmail com>
Date:   Wed Jun 17 01:18:22 2009 +0800

    Adjust gegl_tile_new() params and update all references to it
    
    A GeglGpuTexture needs the tile's width, height and format during
    initialization.  This set of modifications replaces gegl_tile_new()'s
    previous parameter list to instead include the aforementioned
    requirements for GeglGpuTexture initialization.  This set of changes
    also updates all references to gegl_tile_new() to reflect the new
    parameter list.

 gegl/buffer/gegl-tile-backend-file.c    |    5 ++++-
 gegl/buffer/gegl-tile-backend-ram.c     |    5 ++++-
 gegl/buffer/gegl-tile-backend-tiledir.c |    5 ++++-
 gegl/buffer/gegl-tile-handler-empty.c   |    6 +++++-
 gegl/buffer/gegl-tile-handler-zoom.c    |    2 +-
 gegl/buffer/gegl-tile.c                 |    9 ++++++---
 gegl/buffer/gegl-tile.h                 |    4 +++-
 7 files changed, 27 insertions(+), 9 deletions(-)
---
diff --git a/gegl/buffer/gegl-tile-backend-file.c b/gegl/buffer/gegl-tile-backend-file.c
index da29058..8b240a6 100644
--- a/gegl/buffer/gegl-tile-backend-file.c
+++ b/gegl/buffer/gegl-tile-backend-file.c
@@ -458,7 +458,10 @@ gegl_tile_backend_file_get_tile (GeglTileSource *self,
   if (!entry)
     return NULL;
 
-  tile             = gegl_tile_new (backend->tile_size);
+  tile = gegl_tile_new (backend->tile_width,
+                        backend->tile_height,
+                        backend->format);
+
   tile->rev        = entry->rev;
   tile->stored_rev = entry->rev;
 
diff --git a/gegl/buffer/gegl-tile-backend-ram.c b/gegl/buffer/gegl-tile-backend-ram.c
index c2bee78..3a6a28f 100644
--- a/gegl/buffer/gegl-tile-backend-ram.c
+++ b/gegl/buffer/gegl-tile-backend-ram.c
@@ -155,7 +155,10 @@ get_tile (GeglTileSource *tile_store,
     if (!entry)
       return NULL;
 
-    tile             = gegl_tile_new (backend->tile_size);
+    tile = gegl_tile_new (backend->tile_width,
+                          backend->tile_height,
+                          backend->format);
+
     tile->stored_rev = 1;
     tile->rev        = 1;
 
diff --git a/gegl/buffer/gegl-tile-backend-tiledir.c b/gegl/buffer/gegl-tile-backend-tiledir.c
index 221e1ff..be45ac2 100644
--- a/gegl/buffer/gegl-tile-backend-tiledir.c
+++ b/gegl/buffer/gegl-tile-backend-tiledir.c
@@ -152,7 +152,10 @@ get_tile (GeglTileSource *tile_store,
     entry.y = y;
     entry.z = z;
 
-    tile             = gegl_tile_new (backend->tile_size);
+    tile = gegl_tile_new (backend->tile_width,
+                          backend->tile_height,
+                          backend->format);
+
     tile->stored_rev = 1;
     tile->rev        = 1;
 
diff --git a/gegl/buffer/gegl-tile-handler-empty.c b/gegl/buffer/gegl-tile-handler-empty.c
index b958350..f9e8461 100644
--- a/gegl/buffer/gegl-tile-handler-empty.c
+++ b/gegl/buffer/gegl-tile-handler-empty.c
@@ -128,6 +128,7 @@ constructor (GType                  type,
   gint           tile_width;
   gint           tile_height;
   gint           tile_size;
+  Babl          *format;
 
   object = G_OBJECT_CLASS (gegl_tile_handler_empty_parent_class)->constructor (type, n_params, params);
 
@@ -137,9 +138,12 @@ constructor (GType                  type,
   g_object_get (empty->backend, "tile-width", &tile_width,
                 "tile-height", &tile_height,
                 "tile-size", &tile_size,
+                "format", (gpointer) &format,
                 NULL);
+
+  empty->tile = gegl_tile_new (tile_width, tile_height, format);
+
   /* FIXME: need babl format here */
-  empty->tile = gegl_tile_new (tile_size);
   memset (gegl_tile_get_data (empty->tile), 0x00, tile_size);
 
   return object;
diff --git a/gegl/buffer/gegl-tile-handler-zoom.c b/gegl/buffer/gegl-tile-handler-zoom.c
index e574433..af126e7 100644
--- a/gegl/buffer/gegl-tile-handler-zoom.c
+++ b/gegl/buffer/gegl-tile-handler-zoom.c
@@ -261,7 +261,7 @@ get_tile (GeglTileSource *gegl_tile_source,
     g_assert (tile == NULL);
     if (tile == NULL)
       {
-        tile = gegl_tile_new (tile_size);
+        tile = gegl_tile_new (tile_width, tile_height, format);
 
         tile->x          = x;
         tile->y          = y;
diff --git a/gegl/buffer/gegl-tile.c b/gegl/buffer/gegl-tile.c
index a05e3e4..22a6f9a 100644
--- a/gegl/buffer/gegl-tile.c
+++ b/gegl/buffer/gegl-tile.c
@@ -238,12 +238,15 @@ gegl_tile_dup (GeglTile *src)
 }
 
 GeglTile *
-gegl_tile_new (gint size)
+gegl_tile_new (gint        width,
+               gint        height,
+               const Babl *format)
 {
   GeglTile *tile = g_object_new (GEGL_TYPE_TILE, NULL);
 
-  tile->data       = gegl_malloc (size);
-  tile->size       = size;
+  tile->size       = width * height * babl_format_get_bytes_per_pixel (format);
+  tile->data       = gegl_malloc (tile->size);
+  tile->gpu_data   = gegl_gpu_texture_new (width, height, format);
   tile->stored_rev = 1;
 
   return tile;
diff --git a/gegl/buffer/gegl-tile.h b/gegl/buffer/gegl-tile.h
index a691c60..7736e4a 100644
--- a/gegl/buffer/gegl-tile.h
+++ b/gegl/buffer/gegl-tile.h
@@ -80,7 +80,9 @@ struct _GeglTileClass
 
 GType        gegl_tile_get_type   (void) G_GNUC_CONST;
 
-GeglTile   * gegl_tile_new        (gint     size);
+GeglTile    *gegl_tile_new        (gint width,
+                                   gint height,
+                                   const Babl *format);
 
 void       * gegl_tile_get_format (GeglTile *tile);
 gint         gegl_tile_get_width  (GeglTile *tile);



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