Skip to content

Tags: gogpu/gg

Tags

v0.51.0

Toggle v0.51.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v0.51.0 — damage overlay + TT advance cache (#491)

* feat: migrate ggcanvas to DamageReporter API (ADR-065 + ADR-066)

- DamageRectSetter → DamageReporter via RegisterDamageSource('gg')
- damage_debug.go → implements DamageOverlayRenderer with text labels
- Per-source colors, anti-aliased borders, reason detail in labels
- 67 ggcanvas tests passing

Part of: #437

* docs: GOGPU_DEBUG_DAMAGE=1 → =overlay (pre-v1.0 clean cut)

* perf(text): TT advance cache + deps bump + examples update (#490)

- Per-(ppem, glyphID) advance cache in ttHintCacheEntry avoids
  re-running TT bytecode interpreter for advance-only queries.
  60fps→15fps regression from v0.50.13 advanceResolver fixed.
- deps: gpucontext v0.26.0, wgpu v0.31.0, gogpu v0.51.0
- examples: migrate LoadFontFace to text.NewFontSourceFromFile API
- multi_damage_demo: single-path spinner, FPS counter, proper overlay

* fix(lint): remove unused const, fix staticcheck SA4023 in overlay test

v0.50.16

Toggle v0.50.16's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix(text): variable font advance + shear aliased rendering (#405) (#489)

* fix(text): variable font advance + shear aliased rendering (#405)

Two fixes for variable font regression reported by @tsl0922:

1. drawGlyphsVariable used TT-hinted phantom advances (integer-rounded)
   for positioning while Face.Advance/MeasureString used HVAR (fractional).
   Now uses HVAR via varOrRawAdvance(), matching FreeType ttgload.c:964-977.
   Also fixed faceGlyphAdvance to use advanceResolver for MultiFace/FilteredFace.

2. Aliased text with shear/rotation produced garbled output because
   NoAAFiller cannot handle non-axis-aligned paths. Now forces AA for
   non-axis-aligned outlines in both drawStringCPUAliased and drawStringCPU,
   matching Skia computeAxisAlignmentForHText pattern.

8 new tests covering advance consistency and shear rendering quality.

* fix(test): skip ink-width assertion when font lacks test glyphs

Cantarell VF trimmed has no Latin glyphs — rightmostInk=-1 on CI.
Skip subtest instead of failing with impossible -50px width.

v0.50.15

Toggle v0.50.15's commit message
Merge branch 'main' of https://github.com/gogpu/gg

v0.50.14

Toggle v0.50.14's commit message
Merge branch 'main' of https://github.com/gogpu/gg

v0.50.13

Toggle v0.50.13's commit message
Merge branch 'main' of https://github.com/gogpu/gg

v0.50.12

Toggle v0.50.12's commit message
Merge branch 'main' of https://github.com/gogpu/gg

v0.50.11

Toggle v0.50.11's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: prepare v0.50.11 release — deps + docs for #466-469 (#471)

* chore: prepare v0.50.11 — gogpu v0.48.3, CHANGELOG/README/ROADMAP for #466-469

* chore: update gogpu v0.48.4, finalize v0.50.11

v0.50.10

Toggle v0.50.10's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix(gpu): bind group lifecycle + deps v0.30.29 + examples update (#460)

* fix(gpu): defer bind group release for shared encoder (ADR-056, #287)

Shared encoder path released bind groups before gogpu submitted,
causing use-after-free. Own-encoder path unaffected (submit before
return). Fix: defer release to BeginFrame() for shared encoder,
matching Skia Graphite frame-scoped resource lifecycle.

Tested: Vulkan 2314+ frames, DX12, GLES — all 60 FPS stable.

* fix(gpu): defer bind group release for shared encoder + update examples

Shared encoder path released bind groups before submit, causing
use-after-free (wgpu#287). Defer to BeginFrame() for shared encoder.
Update all 14 examples to latest ecosystem deps. Remove stale replace
directives.

v0.50.9

Toggle v0.50.9's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: prepare release v0.50.9 (#459)

v0.50.8

Toggle v0.50.8's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
release: v0.50.8 — dual fill/stroke, blend modes, shaper HVAR, ScaleA…

…bout (#438, #442, #405) (#443)

* feat: ScaleAbout, ShearAbout, undeprecate LoadFontFace, README patterns (#442)

- ScaleAbout(sx, sy, x, y) and ShearAbout — API symmetry with RotateAbout
- LoadFontFace undeprecated — convenient one-liner for quick start
- README: Common Patterns section (FillPreserve+Stroke, Clear, fonts, transforms)
- 5 enterprise tests for ScaleAbout/ShearAbout (pixel-exact match vs manual)

Addresses root.cz tutorial feedback by @tisnik.

* chore: update deps — wgpu v0.30.23, naga v0.17.16, goffi v0.6.2

* fix: shaper HVAR advances for variable fonts (#405)

OwnShaper and BuiltinShaper used hmtx-only advances (base weight),
while ExtractOutlineHintedVar (ADR-054) applied gvar deltas to outlines.
Wider bold glyphs positioned at narrower base-weight spacing caused
letters to overlap under shear/rotation.

Fix: buildShapedGlyphs uses GlyphAdvanceVar (HVAR-adjusted) when face
has variations, matching skrifa invariant: advance_source == outline_source.

Reported by @tsl0922: 'r' and 'l' merge in 'hello world' with shear.

* feat: separate fill and stroke brushes + Push/Pop paint save (#438)

SetFillBrush and SetStrokeBrush are now genuinely independent, matching
HTML5 Canvas fillStyle/strokeStyle semantics. Previously aliased to same
brush. SetColor/SetRGB/SetHexColor set both (backward compat).

Paint uses brushState struct for each side with explicit FillColorAt/
StrokeColorAt methods. SoftwareRenderer and GPU pipeline route fill/stroke
to correct brush via strokeMode flag.

Push/Pop now saves and restores paint state (fill brush, stroke brush,
blend mode) matching Cairo cairo_save/Canvas ctx.save.

ADR-055. 8 dual-paint enterprise tests + 9 agent tests.
Performance: -40% faster FillRect (brushState inlining more cache-friendly).

* chore: prepare release v0.50.8