Skip to content

Releases: ClarkWain/WhatsCanvas

WhatsCanvas 0.3.0

Choose a tag to compare

@github-actions github-actions released this 15 Aug 13:43
8410b48

Adds the first-party Android OpenGL ES host under platforms/android with GLSurfaceView, JNI lifecycle handling, system-font matching, and three ABI builds. Fixes missing Android glyph output caused by GLES texture swizzles and removes round-cap/dashed-stroke AA seams. Includes updated Android integration and cross-platform documentation. Release packages are provided for Windows x64, Linux x64, and macOS universal; the Android host remains a source integration sample rather than a signed distributable APK.

WhatsCanvas 0.2.0

Choose a tag to compare

@ClarkWain ClarkWain released this 13 Aug 04:58

WhatsCanvas 0.2.0 introduces the native Metal backend on Apple platforms and strengthens cross-platform text and packaging support.

Highlights:

  • Native Metal rendering on macOS/iOS, including CAMetalLayer presentation, filters, clipping, mipmaps, GPU timing, and external MTLTexture interop.
  • Metal is included in automatic backend selection on Apple platforms and covered by 21 dedicated tests.
  • Cached native system-font discovery through CoreText, DirectWrite, and fontconfig, with explicit refresh APIs.
  • Stronger Unicode/font fallback behavior and macOS font-collection face discovery.
  • Updated version metadata, vcpkg overlay, documentation, CI gates, and semantic-version release-tag handling.

Validation:

  • 58/58 unit tests and 21/21 Metal tests passed locally.
  • PR and merged-master cross-platform CI passed on Windows, Linux, and macOS.
  • Merged-master release packaging passed for Windows x64, Linux x64, and macOS universal.

See CHANGELOG.md for the full release notes.

v0.1.20

Choose a tag to compare

@github-actions github-actions released this 05 Aug 03:19
WhatsCanvas 0.1.20

WhatsCanvas v0.1.19

Choose a tag to compare

@ClarkWain ClarkWain released this 04 Aug 03:27

WhatsCanvas v0.1.19 improves developer onboarding, package integration, text rendering defaults, and rendering reliability.

Highlights

  • Added a tested vcpkg overlay port with selectable OpenGL, Software, and FreeType/HarfBuzz text features.
  • Added package-manager dependency support for glm, stb, FreeType, and HarfBuzz, including both common HarfBuzz CMake target variants.
  • Enabled the bundled FreeType rasterizer and HarfBuzz OpenType shaping by default for OpenGL-family builds and release packages.
  • Isolated installed renderer exports so Software-only consumers do not import OpenGL or text-stack targets.
  • Added a visual API integration gallery for Software, OpenGL, OpenGL ES, and Vulkan.
  • Fixed stale OpenGL VAO state after off-screen shadow and filter passes.
  • Restored auditable performance evidence validation: 26 leads, 0 losses, 1 tie, with 27/27 pixel quality checks in the archived NanoVG matrix.

Validation

  • Windows, Linux, and macOS builds and unit tests passed.
  • OpenGL, OpenGL ES, Vulkan, default text stack, package consumer, API reference, version, and performance gates passed.
  • Windows x64, Linux x64, and macOS universal packages are built by the release workflow and will appear below as assets.

Full changelog: v0.1.18...v0.1.19

WhatsCanvas 0.1.18

Choose a tag to compare

@ClarkWain ClarkWain released this 30 Jul 00:10

What's Changed

  • Release 0.1.18: filter chains, diagnostics, and path batching by @ClarkWain in #64

Full Changelog: v0.1.17...v0.1.18

WhatsCanvas 0.1.17

Choose a tag to compare

@github-actions github-actions released this 29 Jul 11:15

Highlights

  • Added a reproducible 1080p performance suite covering stable, dynamic-data, and dynamic-structure workloads for geometry, images, and multilingual text.
  • Added a quality-gated cross-library benchmark matrix with ABBA scheduling, bootstrap confidence intervals, and a checked-in NanoVG comparison baseline.
  • Improved OpenGL path and sprite batching, Vulkan geometry/texture submission, and Software raster/filter fast paths.
  • Added bounded cache and retained-memory diagnostics for glyph atlases, tessellation, bitmap text, and render targets.
  • Added cross-backend image-filter pixel parity gates for OpenGL, OpenGLES, and Vulkan, including strict Mesa software-driver validation.

Packages

  • Windows x64 Release
  • Linux x64 Release
  • macOS universal Release (x86_64 + arm64)

See CHANGELOG.md for the complete list of changes.

v0.1.16 — Cross-backend image filters and frosted glass

Choose a tag to compare

@ClarkWain ClarkWain released this 25 Jul 07:16

What's Changed

  • Add full shared package backends and consumer example by @ClarkWain in #48
  • Improve curve tessellation, analytic AA, and Fluent fonts by @ClarkWain in #49
  • feat(filters): add GPU image and backdrop filters by @ClarkWain in #51
  • feat(filters): add cross-backend inner shadows by @ClarkWain in #52
  • docs: align documentation with current implementation by @ClarkWain in #50
  • chore(release): prepare 0.1.16 by @ClarkWain in #53

Full Changelog: v0.1.15...v0.1.16

v0.1.15 — DirectWrite text backend + three-layer cache + ADR-006 progress

Choose a tag to compare

@github-actions github-actions released this 16 Jul 13:46

WhatsCanvas v0.1.15

Version bump 0.1.14 → 0.1.15 documenting the 17 PRs (#27#46) merged since 0.1.14.

Highlights

Text rendering

  • DirectWrite text backend (Windows): first-class native adapter selectable via TextBackendKind::DirectWrite. Covers measurement, real line breaking via IDWriteTextLayout, weight / slant / spacing / locale styling, custom in-memory font registration and fallback chains, underline / strikethrough decorations, and grayscale + ClearType raster modes. resolveFontFamilies now matches the portable backend.
  • Per-Paint TextRenderMode (Auto / Grayscale / ClearType): explicit per-draw opt-in for ClearType when the surface is known to be opaque and axis-aligned.
  • Cross-backend text decoration parity: underline and strikethrough now render consistently on the portable, DirectWrite, and software backends; a regression test pixel-compares all three.
  • Text sharpness / HiDPI: text rasterizes at effective device pixel size under a scaled transform or Canvas::setDevicePixelRatio, and glyph quads snap to the pixel grid on axis-aligned draws.

Performance

  • DirectWrite three-layer cache: repeat UI text draws pay only the scissor + quad-submit cost per frame.
    1. COM apartment + WIC/D2D factories cached process-wide.
    2. Rasterized bitmap + intrinsic metrics cached in an LRU (4 MB byte budget by default) keyed by (text, paint, dpr, render-mode).
    3. Canvas keeps a 256-entry LRU of GPU textures keyed by the backend-provided content id, so identical text skips the CPU→GPU upload entirely.

Rendering

  • Default anti-aliasing: Paint now defaults to AA strokes and fills; opt out with Paint::setAntiAlias(false).
  • OpenGL ClipFill primitive support in executeDrawList: a new DrawClipFillProgram mirrors Vulkan's clip pipeline (mask.r × tint color) — closes an ADR-006 parity gap.
  • Shared encoder resilience: CommandDrawListEncoder no longer aborts the whole encode on a clipped point/line/vector-text command; it warns and continues so the rest of the offscreen replay still produces output.

Fixes

  • MSVC on non-English Windows: CMakeLists.txt now passes /utf-8 to MSVC so UTF-8 source files decode consistently under the active ANSI code page.

Compatibility

  • Public API: fully backwards compatible with 0.1.14. TextRenderMode is a new opt-in enum with Auto default.
  • CMake: find_package(WhatsCanvas 0.1.15 CONFIG REQUIRED).

Validation

  • Full ctest suite (39/39) green on Windows Debug throughout the release.
  • Cross-Platform Validation matrix all SUCCESS: Windows / Linux / macOS unit, OpenGLES smoke, package-consumer, cmake-release, optional-font-stack, api-reference, Vulkan.
  • Release preflight (WhatsCanvasVersionConsistencyCheck, WhatsCanvasApiReferenceCheck, WhatsCanvasPackageConsumerSmoke): 3/3 PASS.

Documentation

  • Refreshed doc/DIRECTWRITE_DESIGN_REVIEW.md with a status table mapping each of the five original review issues to the PR(s) that closed it.
  • doc/DIRECTWRITE_TEXT_BACKEND.md known-limitations section rewritten around the three-layer cache.
  • ADR-006 gained a Progress Log section (PR #42 / PR #44).
  • doc/DIRECT3D_DESIGN_REVIEW.md added under version control.

See CHANGELOG.md for the full entry.

WhatsCanvas 0.1.14

Choose a tag to compare

@github-actions github-actions released this 08 Jul 12:22

Symmetric frame API and a documentation clarification that prevents a common "black screen" pitfall.

Breaking (pre-1.0)

  • Removed Canvas::flush(). Drawing is now a symmetric beginFrame() / endFrame() pair.

    Migration — replace every flush with endFrame:

    canvas->beginFrame();
    canvas->drawRect(/* ... */, paint);
    canvas->endFrame();               // was: canvas->flush();
    canvas->readPixelsRGBA(pixels);   // or savePixelsPPM("out.ppm")

    endFrame() renders the recorded commands onto a freshly-cleared framebuffer, makes them readable, and consumes them. Call it exactly once per frame, right before readPixelsRGBA / present.

Changed

  • Documented the offscreen frame lifecycle so the "black readback" pitfall is obvious: calling the frame-ender twice (or beginFrame() after drawing) re-clears the buffer and yields an empty image. Added a Get Started "frame lifecycle" section and a Troubleshooting entry, and clarified the beginFrame / endFrame API doc comments.

No other API changes. The internal renderer-level flush() (implementation detail) is unrelated and unchanged.

See the CHANGELOG.

WhatsCanvas 0.1.13

Choose a tag to compare

@github-actions github-actions released this 08 Jul 10:32

Patch release focused on Windows prebuilt-binary link portability.

Fixed

  • The published Windows libraries no longer reference toolset-version-specific MSVC STL vectorized helpers (__std_min_element_f_ / __std_max_element_f_). Previously, a package built on a newer CI toolchain failed to link on a consumer's older Visual Studio with:

    error LNK2019: unresolved external symbol __std_min_element_f_ ...
    error LNK2019: unresolved external symbol __std_max_element_f_ ...
    fatal error LNK1120: 2 unresolved externals
    

    WhatsCanvas is now compiled with _USE_STD_VECTOR_ALGORITHMS=0 on MSVC (scalar path), so the shipped .lib files link against any VS 2022 STL, not just the exact toolset that produced them.

Also

  • The Windows packaging job is pinned to windows-2022 for reproducibility.
  • doc/TROUBLESHOOTING.md documents the LNK2019 __std_*_element_* symptom and its fixes.

No API changes. If you hit the link error with the 0.1.12 package, upgrade to this release (or update Visual Studio / build from source).

See the CHANGELOG.