Beispiel #1
0
void
gegl_cache_invalidate (GeglCache           *self,
                       const GeglRectangle *roi)
{
  gint i;
  g_mutex_lock (&self->mutex);

  if (roi)
    {
      GeglRectangle expanded = gegl_rectangle_expand (roi);

      GeglRegion *temp_region;
      temp_region = gegl_region_rectangle (&expanded);
      for (i = 0; i < GEGL_CACHE_VALID_MIPMAPS; i++)
        gegl_region_subtract (self->valid_region[i], temp_region);
      gegl_region_destroy (temp_region);
      g_signal_emit (self, gegl_cache_signals[INVALIDATED], 0,
                     roi, NULL);
    }
  else
    {
      GeglRectangle rect = { 0, 0, 0, 0 }; /* should probably be the extent of the cache */
      for (i = 0; i < GEGL_CACHE_VALID_MIPMAPS; i++)
      {
        if (self->valid_region[i])
          gegl_region_destroy (self->valid_region[i]);
        self->valid_region[i] = gegl_region_new ();
      }
      g_signal_emit (self, gegl_cache_signals[INVALIDATED], 0,
                     &rect, NULL);
    }
  g_mutex_unlock (&self->mutex);
}
Beispiel #2
0
static void
gegl_cache_constructed (GObject *object)
{
  GeglCache *self = GEGL_CACHE (object);
  gint i;

  G_OBJECT_CLASS (gegl_cache_parent_class)->constructed (object);

  for (i = 0; i < GEGL_CACHE_VALID_MIPMAPS; i++)
    self->valid_region[i] = gegl_region_new ();
}
static GObject *
gegl_cache_constructor (GType                  type,
                        guint                  n_params,
                        GObjectConstructParam *params)
{
    GObject   *object;
    GeglCache *self;

    object = G_OBJECT_CLASS (gegl_cache_parent_class)->constructor (type,
             n_params,
             params);
    self = GEGL_CACHE (object);

    self->valid_region = gegl_region_new ();
    self->format       = GEGL_BUFFER (self)->format;

    return object;
}
void
gegl_cache_invalidate (GeglCache           *self,
                       const GeglRectangle *roi)
{
#if 0
    if (roi)
    {
        gegl_buffer_clear (GEGL_BUFFER (self), roi);
    }
    else
    {
        g_warning ("XXX: full invalidation of GeglCache NYI\n");
    }
#endif

    g_mutex_lock (self->mutex);

    if (roi)
    {
        GeglRectangle expanded = gegl_rectangle_expand (roi);

        GeglRegion *temp_region;
        temp_region = gegl_region_rectangle (&expanded);
        gegl_region_subtract (self->valid_region, temp_region);
        gegl_region_destroy (temp_region);
        g_signal_emit (self, gegl_cache_signals[INVALIDATED], 0,
                       roi, NULL);
    }
    else
    {
        GeglRectangle rect = { 0, 0, 0, 0 }; /* should probably be the extent of the cache */
        if (self->valid_region)
            gegl_region_destroy (self->valid_region);
        self->valid_region = gegl_region_new ();
        g_signal_emit (self, gegl_cache_signals[INVALIDATED], 0,
                       &rect, NULL);
    }
    g_mutex_unlock (self->mutex);
}