1. 14 Aug, 2018 3 commits
    • Øyvind "pippin" Kolås's avatar
      configure: depend on babl 0.1.56 · 7ab21c10
      Øyvind "pippin" Kolås authored
    • Ell's avatar
      buffer: don't store empty tiles in the swap · f6b5b17a
      Ell authored
      In GeglTileBackendSwap, void any existing tile upon SETting an
      empty tile, instead of writing the empty tile data to disk.  The
      empty tile will be recreated by the empty-tile handler upon
    • Ell's avatar
      buffer: always increase revision of duplicate tiles, even empty · 5a8c84e7
      Ell authored
      In gegl_tile_dup(), increate the revision of the newly-created
      duplicate tile unconditionally, even if it's empty, so that it gets
      Instead of special-casing empty tiles in the above function, mark
      newly-craeted empty tiles as stored in the empty-tile handler.
      This way, newly-created empty tiles are not stored, but copied
      empty tiles are, since we might need them to replace outdated data
      in the tile backend.  Tile backends may, in turn, test for empty
      tiles upon a SET command, and drop the existing tile instead of
      storing the empty tile.
      Remove the now-unnecessary revision bump in gegl_buffer_copy().
  2. 11 Aug, 2018 2 commits
    • Ell's avatar
      buffer: in GeglTileBackendSwap, move reused OP_DESTROY to the top · 3275239e
      Ell authored
      In gegl_tile_backend_swap_entry_destroy(), when reusing an existing
      queued op as an OP_DESTROY, move the op to the top of the queue, so
      that the corresponding storage is reclaimed before any pending
      WRITE ops.  This used to be the behavior before last commit, which
      accidentally removed it.
    • Ell's avatar
      buffer: fix potential race condition during tile-swap entry destruction · 4241b0fd
      Ell authored
      In gegl_tile_backend_swap_entry_destroy(), don't free the entry in
      the calling thread when it has a pending op in the queue, but no
      allocated storage, since the test for whether the entry has
      allocated storage introduces a race condition between the calling
      thread and the writer thread, where storage allocation happens.
      Instead, always convert the existing op to an OP_DESTROY.
      In particular, this could lead to a use-after-free and/or swap-
      space leak, if a TILE_SET command is issued for a tile while it is
      being written to the swap by the writer thread (after the
      corresponding OP_WRITE has been dequeued).  In this case, another
      OP_WRITE is pushed to the queue.  If the corresponding entry
      doesn't have storage allocated yet, and is then destroyed, the
      entry will be freed while the writer thread is still potentially
      using it while serving the earlier OP_WRITE, and the storage
      subsequently allocated for it will never be reclaimed.
  3. 10 Aug, 2018 2 commits
  4. 09 Aug, 2018 5 commits
  5. 06 Aug, 2018 3 commits
  6. 05 Aug, 2018 1 commit
  7. 03 Aug, 2018 1 commit
  8. 02 Aug, 2018 1 commit
  9. 31 Jul, 2018 2 commits
    • Ell's avatar
      long-shadow: fix finite shadow accumulation · da936ece
      Ell authored
      For finite shadows, when replacing the current shadow value of a
      screen pixel, clear the pixel's now-irrelevant shadow queue, and
      correct the active-pixel count.  Note that failing to do either of
      these doesn't actually produce wrong results, but performance
      should be better in some cases now.
    • Rodrigo Lledó Milanca's avatar
      Update Spanish translation · e4ac3f45
      Rodrigo Lledó Milanca authored
  10. 30 Jul, 2018 5 commits
    • Ell's avatar
    • Ell's avatar
      long-shadow: add new operation to workshop · ef6a3e94
      Ell authored
      Add a gegl:long-shadow operation, which (surprise surprise) creates
      a long-shadow effect.  The operation supports three shadow styles:
      finite, infinite, and fading.  The shadow's color, angle, length
      (for finite shadows), and midpoint (for fading shadows) are
      Additionally, the output composition is also controllable, and can
      be one of:
        - Shadow plus image:  Both the shadow and the input image are
          included in the output.
        - Shadow only:  Only the shadow is included in the output.
        - Shadow minus image:  Only the parts of the shadow that aren't
          obscured by the input image are included in the input.  In
          GIMP, such output can be combined with the original layer using
          "Merge" layer mode, to achieve the same result as "Shadow plus
          image", using separate layers for the image and the shadow.
      The operation preserves partial-transparency, and produces anti-
      aliased results.
    • Ell's avatar
      median-blur: add "abyss-policy" property · 31ee079d
      Ell authored
      Add an "abyss-policy" property to gegl:median-blur, which controls
      the input's abyss policy, and can be one of NONE or CLAMP, for now.
      When the abyss policy is NONE, the op's bounding box is expanded
      according to the blur radius, while when the abyss policy is CLAMP,
      the op's bounding box is clamped to the input bounding box.
      The default abyss policy is CLAMP, to keep the current behavior.
    • Rodrigo Lledó Milanca's avatar
      Update Spanish translation · 43979a09
      Rodrigo Lledó Milanca authored
    • Rodrigo Lledó Milanca's avatar
      Update Spanish translation · ff0ff636
      Rodrigo Lledó Milanca authored
  11. 28 Jul, 2018 1 commit
  12. 27 Jul, 2018 1 commit
  13. 26 Jul, 2018 1 commit
  14. 25 Jul, 2018 1 commit
  15. 24 Jul, 2018 4 commits
  16. 23 Jul, 2018 4 commits
  17. 22 Jul, 2018 3 commits