Ejemplo n.º 1
0
void
gegl_cache_computed (GeglCache           *self,
                     const GeglRectangle *rect)
{
    g_return_if_fail (GEGL_IS_CACHE (self));
    g_return_if_fail (rect != NULL);

    g_mutex_lock (self->mutex);
    gegl_region_union_with_rect (self->valid_region, rect);
    g_signal_emit (self, gegl_cache_signals[COMPUTED], 0, rect, NULL);
    g_mutex_unlock (self->mutex);
}
gboolean gegl_can_do_inplace_processing (GeglOperation       *operation,
                                         GeglBuffer          *input,
                                         const GeglRectangle *result)
{
  if (!input || 
      GEGL_IS_CACHE (input))
    return FALSE;
  if (gegl_object_get_has_forked (input))
    return FALSE;
      

  if (input->format == gegl_operation_get_format (operation, "output") &&
      gegl_rectangle_contains (gegl_buffer_get_extent (input), result))
    return TRUE;
  return FALSE;
}
Ejemplo n.º 3
0
void
gegl_cache_computed (GeglCache           *self,
                     const GeglRectangle *rect,
                     gint                 level)
{
  g_return_if_fail (GEGL_IS_CACHE (self));
  g_return_if_fail (rect != NULL);

  g_mutex_lock (&self->mutex);

  if (level < GEGL_CACHE_VALID_MIPMAPS)
    gegl_region_union_with_rect (self->valid_region[level], rect);

  g_signal_emit (self, gegl_cache_signals[COMPUTED], 0, rect, NULL);
  g_mutex_unlock (&self->mutex);
}
Ejemplo n.º 4
0
gboolean
gegl_buffer_list_valid_rectangles (GeglBuffer     *buffer,
                                   GeglRectangle **rectangles,
                                   gint           *n_rectangles)
{
  GeglCache *cache;
  gint level = 0; /* should be an argument */
  g_return_val_if_fail (GEGL_IS_CACHE (buffer), FALSE);
  cache = GEGL_CACHE (buffer);

  if (level < 0)
    level = 0;
  if (level >= GEGL_CACHE_VALID_MIPMAPS)
    level = GEGL_CACHE_VALID_MIPMAPS-1;

  gegl_region_get_rectangles (cache->valid_region[level],
                              rectangles, n_rectangles);

  return TRUE;
}