# Changelog

# 1.0.2 - 2026-09-29

  • Every test suite has a 10-minute timeout, so the slower GPU suites pass on software Vulkan in CI and the release workflow publishes the prebuilt SDK, which 1.0.1 did not.

# 1.0.1 - 2026-09-29

  • Prebuilt Linux x86_64 SDK attached to every GitHub release, built and tested by the new release workflow.
  • Documented consumption with FetchContent, verified from a separate project.
  • The version lives in project() of CMakeLists.txt; the VERSION file is gone.
  • Tests pass on software Vulkan (lavapipe): the affine test is compiled without floating-point contraction, the filter contract test fits the device's buffer limit, and the large-filter test has a longer timeout.

# 1.0.0 - 2026-09-29

C++23/WebGPU image primitives with linear premultiplied float32 RGBA images, HDR and negative color support, and A8 selection masks.

  • Commands grow automatically from an initial capacity hint. Recording failures preserve earlier work. Each processing pipeline compiles on its first submission; Context::prepare() compiles them all up front. Context::limits() reports resource limits, Context::is_complete() polls submissions, and Display::draw() returns one.
  • Large GPU working storage is reserved before recording. Filters and effects, geometry reductions, selection edits, focus and smudge take a caller-created Workspace sized by their *_requirements query; plans merge for reuse. Stroke continuation states and viewport caches are reserved explicitly by their owners. Resources are released when their last owner lets them go.
  • Filters include exact local float medians, bounded box and round morphology dispatches, and bounded native submission storage.
  • Painting provides image and mask brushes/erasers, stroke continuation states, alpha preservation, gradient replacement through gradient_fill.replace, and selection-only bucket filling through paint_bucket.match_seed = false.
  • Mask edits and geometry support write masks and regions. A8 transfers support partial regions and configurable buffer capacity; apply_mask applies coverage to image pixels. select_color_range and select_magic_wand use normalized color-distance controls.
  • Image and mask levels share LevelsTransfer; color controls share ColorEncoding, and measurements share AnalysisOptions. Geometry includes fractional Point zoom centers and affine/projective transform overloads.
  • The public header and generated reference group the API by area. Rendered examples and native tests cover the public API.