Skip to content

Tags: gogpu/gg

Tags

v0.48.12

Toggle v0.48.12's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: update stroke tests + docs for v0.48.12 (#374, #376) (#377)

- Tests: split Vello stroke tests into Smooth/Sharp variants matching
  dynamic fill rule from PR #376 (smooth→NonZero, sharp→EvenOdd)
- CHANGELOG: v0.48.12 AMD stencil invert workaround (@lkmavi)
- ROADMAP: v0.48.12 current, release table updated

v0.48.11

Toggle v0.48.11's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: set EvenOdd fill rule in VelloAccelerator.StrokePath (#369) (#372)

VelloAccelerator.StrokePath passed the original paint (NonZero) to FillPath
after stroke expansion. The expanded outline has two contours (outer + inner,
opposite winding) — NonZero fills both as solid, EvenOdd correctly cancels
the inner to produce a hollow ring.

Verified against Skia, tiny-skia, our expander — all produce two contours
with opposite winding. 2 regression tests added. ADR-043.

Closes #369 (@TimLai666).

v0.48.10

Toggle v0.48.10's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: backdrop prefix sum boundary + wgpu v0.30.1 opaque handles (v0.4…

…8.10) (#370)

* feat!: migrate to wgpu v0.30.1 opaque handle pattern

BREAKING: gpucontext.Device/Queue/Adapter changed from interfaces to
opaque structs with Pointer()/IsNil() methods (wgpu#218 sentinel design).

Migration in gg:
- gpu_shared.go: type assertions replaced with wgpu.DeviceFromHandle()
  and wgpu.AdapterFromHandle() helpers
- vello_accelerator.go: same pattern
- render/device.go: NullDeviceHandle returns zero-value structs
- render/device_test.go: nil checks → .IsNil() checks
- render/example_test.go: output format updated
- canvas_test.go: mock Device/Queue/Adapter removed (structs not mockable)
- accelerator.go: godoc updated for new handle pattern

Zero unsafe.Pointer usage in gg — all conversions via wgpu helpers.

* chore: update gogpu v0.41.14 → v0.42.0 in examples

* fix: bound CalculateBackdrop prefix sum to per-row entry extents

BUG-BACKDROP-001 (ADR-042): the three-pass prefix sum in CalculateBackdrop
propagated winding across ALL tile columns in each row. When rotated text
glyphs had unclosed contours in the coarse grid, winding leaked to the right
edge of the viewport — emitBackdropOnlyTiles filled those tiles as solid
black, creating a 30x20 pixel artifact 93px past the text boundary.

Fix: track per-row [minX, maxX) from actual entries and limit the prefix
sum to that range. Tiles outside the bounds keep backdrop=0. This matches
Vello's backdrop_dyn.wgsl which bounds the prefix sum to per-path bbox,
and our own tilecompute/rasterizer.go:87-99 which already does this correctly.

Regression introduced in v0.48.6 (PR #357). Discovered during enterprise
audit session. Root cause chain: filler_comparison_test.go registers
AdaptiveFiller via init() → SparseStrips active for all tests → curved
glyph outlines exceed 64-element threshold → SparseStrips used for
per-glyph Fill() → CalculateBackdrop prefix sum leaks.

Verified: all 4 enterprise references (Vello backdrop_dyn.wgsl, Vello
strip.rs, tiny-skia path.rs, Skia SkScan_AAAPath.cpp) bound winding to
path extents, never to full viewport.

* docs: update CHANGELOG and ROADMAP for v0.48.10

- CHANGELOG: BUG-BACKDROP-001 fix, wgpu v0.30.1 migration, deps update
- ROADMAP: v0.48.10 current, v0.49.0 gradients+clipping, release table

v0.48.9

Toggle v0.48.9's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: glyph mask quadOffset + deps update + ROADMAP v1.0 (#366)

* chore(deps): wgpu v0.29.14, naga v0.17.14

* chore: update wgpu v0.29.14 → v0.29.15, naga v0.17.14 → v0.17.15, gogpu v0.41.4 → v0.41.13

Update ecosystem dependencies in main go.mod and all examples.
wgpu v0.29.15: GLES GLSL version propagation, Wayland fixes.
naga v0.17.15: GLSL uniform reflection for runtime binding fallback.
gogpu v0.41.13: hidden-then-show window pattern, Wayland SIGSEGV fix.

* fix: advance quadOffset on nil bind group skip in glyph mask draw calls

BUG-GLYPHMASK-001: buildGlyphMaskDrawCalls skipped batches with nil bind
groups via continue without advancing quadOffset. Subsequent batches received
wrong indexOffset into the shared vertex/index buffer, causing text to render
from wrong quads (invisible or garbled). Affects all GPU backends when a glyph
mask bind group fails to initialize.

Also: removed unused uniformSize parameter from ensureGlyphMaskBatchPools
(unparam lint fix — always glyphMaskLCDUniformSize).

Added 3 regression tests covering nil bind group, all valid, and empty batch.
Discovered during enterprise audit (#365).

* chore: update gogpu v0.41.13 → v0.41.14 in examples

* docs: update CHANGELOG and ROADMAP for v0.48.9

- CHANGELOG: BUG-GLYPHMASK-001 fix, deps v0.29.15/v0.17.15/v0.41.14
- ROADMAP: enterprise roadmap to v1.0.0 (Nov 2027) with quarterly milestones,
  API freeze blockers, post-1.0 vision. Updated from feature changelog to
  strategic planning document.

v0.48.8

Toggle v0.48.8's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: update wgpu v0.29.1 → v0.29.4, gogpu v0.41.0 → v0.41.4 in exam…

…ples (#363)

CHANGELOG v0.48.8, README updated (OpenType font features).

v0.48.7

Toggle v0.48.7's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: update wgpu v0.29.1, gogpu v0.40.0, gg v0.48.6 in examples (#358)

v0.48.6

Toggle v0.48.6's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: SDF thin stroke fallback + winding propagation (#346, BUG-SPARSE…

…-STRIPS-001) (#357)

* fix: SDF thin stroke fallback to geometric expansion (#346, ADR-040)

SDF stroke with lineWidth < 2.0 returns ErrFallbackToCPU — annular ring
thinner than smoothstep AA zone produces near-zero coverage. Geometric
stroke expansion (CPU scanline) handles thin strokes correctly.

Threshold 2.0px: at half_stroke=1.0 > smoothstep_zone=0.5, ring extends
beyond AA zone with full center coverage. Applied to both CPU SDF
accelerator and GPU render context.

* fix: SparseStripsFiller winding propagation (BUG-SPARSE-STRIPS-001)

Backdrop calculation uses Vello backdrop.wgsl prefix-sum pattern.
FineRasterizer propagates windingDelta between non-adjacent tiles
on same row (Rust Vello strip.rs:259-263). Interior tiles with
non-zero backdrop but no segments now emitted as solid fills.

Removes the last known correctness gap between SparseStripsFiller
and AnalyticFiller for multi-contour NonZero fills.

v0.48.5

Toggle v0.48.5's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
feat: TextModeAliased CPU + fractional glyph advances (#353) (#356)

* feat: TextModeAliased CPU fallback via NoAAFiller (#353)

CPU-only contexts (gg.NewContext + SavePNG) now render aliased text
using GlyphMaskRasterizer.RasterizeAliased per glyph — same NoAAFiller
binary coverage as GPU Tier 6 path. Matches Skia/Cairo/tiny-skia
enterprise pattern (dedicated non-AA scan converter, not threshold).

Rotation/skew routes through drawStringAsOutlines with Antialias=false.
text.DrawAliased() parallels text.Draw() with binary-only output.

* feat: fractional glyph advances + per-glyph rendering (ADR-039)

GlyphAdvance uses HintingNone for fractional layout advances (Skia
linearHoriAdvance pattern). text.Draw replaced font.Drawer with
per-glyph RasterizeHinted — hinted outlines + fractional positioning.
Shared drawGlyphs helper for Draw and DrawAliased.

Fixes letter merging at 10-12px ('Te' gap preserved via ~7.33 advance
instead of integer-rounded 7.0).

v0.48.4

Toggle v0.48.4's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
fix: stroke inner join teeth on thick strokes (#354, #353) (#355)

* chore(examples): update gg v0.47.0 → v0.48.2, gogpu v0.39.0, wgpu v0.28.7

* chore(examples): update gogpu v0.39.0 → v0.39.1

* fix: stroke inner join teeth on thick strokes (#354, #353)

handleInnerJoin now emits two lineTo calls matching tiny-skia
stroker.rs:1370-1379: route through pivot, then place at correct
normal offset. Missing second lineTo caused diagonal 'tent' artifacts
visible as sawtooth teeth on circles and twisted corners on rectangles
at lineWidth >= 5.

Added StrokeString godoc recommending LineJoinRound for thick text.
Added 9 regression tests (circle/rect/offset at multiple lineWidths).

v0.48.3

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