Tags: gogpu/gg
Tags
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
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.
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.
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
PreviousNext