Repository navigation
Releases: stevepryde/sgl
Releases · stevepryde/sgl
Release list
v0.5.0
New sgl-2d features; nothing changes for a game that does not opt in.
sgl-2d::canvas::Renderer::set_sprite_filter(linear): sprite pages were
always sampled nearest; linear sampling is now selectable (nearest stays the
default). Under linear sampling every fragment's sample is clamped half a
texel inside its sprite's page rect, so atlas neighbours never bleed and
1:1 sprites and text stay texel-exact. Opt in with
renderer.set_sprite_filter(true); otherwise no game-code changes are needed.sgl-2d::canvas::SpriteInstance::shape,sgl-2d::canvas::Shape,
sgl-2d::UiFrame::rounded_rect: anti-aliased signed-distance rounded
rectangles (fill, inner border of a given width and colour, corner radius)
drawn through the sprite pipeline with the usual z order, clip and rotation,
one target pixel wide at any UI scale.SpriteInstance::newsets
shape: None; aSpriteInstancestruct literal written without
..SpriteInstance::new(..)must addshape: None. Draw one with
frame.rounded_rect(rect, radius, fill, border_width, border_color).sgl-2d::UiFrame::clip(): returns the clip currently applied, so a widget
that clips its own text can narrow it and restore it instead of replacing an
enclosing scroll area's clip. No game-code changes are needed.
v0.4.2
Fixed colour tone mapping, supporting ACES, AgX, Khronos. Default to Khronos.
Full Changelog: v0.4.1...v0.4.2
v0.4.1
What's Changed
- sgl-2d: splitter drag no longer panics on inverted or NaN bounds by @stevepryde in #352
- sgl-post-fx: an SSR ray that runs out of lookups reports a miss by @stevepryde in #355
- sgl-3d: keep a resize's history reset requested after render by @stevepryde in #357
- sgl-core: animation ticks always return by @stevepryde in #359
- sgl-core: StateHasher promises distinct digests within one schema by @stevepryde in #362
- sgl-2d: refuse empty or mis-sized textures instead of panicking by @stevepryde in #361
- sgl-net: accept IPv6-literal WebSocket origins by @stevepryde in #353
- sgl-net: connect the native WebSocket client to IPv6-literal URLs by @stevepryde in #356
- sgl-net: threaded UDP disconnect delivers accepted messages before closing by @stevepryde in #360
- workspace: record clippy lint exemptions; sgl-input takes the clippy lints by @stevepryde in #354
- scripts/tasks.ts: check for the wasm-bindgen CLI before check runs by @stevepryde in #358
- sgl-core: derive_stream_seed absorbs components without cancelling by @stevepryde in #364
- sgl-2d: DrawList::sort uses a total order so NaN z cannot panic by @stevepryde in #371
- CHANGELOG: restore the truncated DrawList::sort bullet by @stevepryde in #384
- sgl-post-fx: clip SSR rays towards the camera at the near plane by @stevepryde in #366
- sgl-3d: refuse glTF accessors the gltf readers cannot read by @stevepryde in #367
- sgl-3d: auto exposure lands on its target after a long frame by @stevepryde in #369
- Packaging: include lists keep examples, tests and unused vendor files out of published crates by @stevepryde in #378
- sgl-2d: password clear keeps the preallocated secret buffer by @stevepryde in #374
- sgl-net: describe the WebSocket latest-state ordering it actually gives by @stevepryde in #375
- direct-game: keep one texture cache for the white and a second texture by @stevepryde in #381
- sgl-3d: refuse glTF node hierarchies that are not trees by @stevepryde in #370
- sgl-post-fx: roughness-0 SSR rays take the mirror direction; finite resolve weights by @stevepryde in #372
- sgl-core: a one-element ping-pong sequence plays its element once by @stevepryde in #380
- sgl-core: a zero-time sequence pass counts playback positions, not steps by @stevepryde in #373
- sgl-core: an embedded body cannot move deeper; reject bad collision lengths by @stevepryde in #383
- sgl-net: finish a native WebSocket graceful close only once it has flushed by @stevepryde in #365
- sgl-net: cancel a browser reconnect scheduled before a local disconnect by @stevepryde in #376
- sgl-3d: dynamic GI refunds a refused ray reservation by @stevepryde in #379
- sgl-2d: scroll areas intersect and restore the enclosing clip by @stevepryde in #382
- sgl-2d: a clipped dropdown blocks only its visible options by @stevepryde in #388
- Docs: make spec and README references match the code by @stevepryde in #386
- sgl-net: require a browser latest-state watermark that fits the largest state by @stevepryde in #389
- sgl-3d: refuse a glTF mesh whose primitives differ in morph-target count by @stevepryde in #387
- sgl-2d: Overlay takes WorldUnits so world gizmos are not shrunk by @stevepryde in #397
- sgl-core: ping-pong turns on the first and last frame steps by @stevepryde in #393
- sgl-core: bound the ColliderSet broadphase for huge boxes by @stevepryde in #398
- sgl-net: reconnect the browser client after a receive failure by @stevepryde in #390
- sgl-3d: a Velvet SSR ray that runs out of steps reports a miss by @stevepryde in #396
- sgl-post-fx: half-resolution SSR misses where its traced pixel is background by @stevepryde in #385
- sgl-input: report macOS input queued before an unplug ahead of its disconnect by @stevepryde in #399
- sgl-net: UDP retransmissions back off and only timeout_ms closes a peer by @stevepryde in #368
- sgl-net: a stopped UDP server still answers clients it already accepted by @stevepryde in #377
- sgl-3d: SMAA runs on tone-mapped display colour by @stevepryde in #392
- sgl-post-fx: TAA's closest-motion search clamps neighbours to the screen by @stevepryde in #395
- sgl-3d: cap probe_collection's bucket bit walk with a named constant (AR-12) by @stevepryde in #413
- sgl-2d: Aseprite frames outside the sheet are an error by @stevepryde in #404
- sgl-2d: a removed open dropdown closes and releases keyboard capture by @stevepryde in #403
- sgl-3d: an ignored glTF occlusion map constrains neither attributes nor sampling by @stevepryde in #401
- sgl-2d: Aseprite pingpong_reverse tags play in reverse ping-pong by @stevepryde in #407
- sgl-3d: reflection depth history is linearised with its own near plane by @stevepryde in #415
- sgl-2d: a scaled-down target keeps the window's UI layout by @stevepryde in #406
- sgl-post-fx: half-resolution SSR keeps every target at least one texel by @stevepryde in #414
- sgl-input: ignore repeated Gilrs Connected; drop unmatched releases by @stevepryde in #405
- sgl-2d: reuse least recently used glyph pages; bound ring widths by @stevepryde in #416
- sgl-2d: shadows of long edges near a light cover its footprint by @stevepryde in #417
- sgl-post-fx: linearise the reprojected depth with the previous projection by @stevepryde in #400
- sgl-3d: draw candidate buffers stop growing at the storage binding limit by @stevepryde in #408
- sgl-post-fx: the blue-noise draw cycles its frame index so its vertices fit by @stevepryde in #411
- sgl-3d: the shader contract describes the tangent a vertex without one gets by @stevepryde in #418
- sgl-2d: give an oversized glyph its own page instead of panicking by @stevepryde in #419
- sgl-3d: a game shader may not declare a WGSL built-in's name by @stevepryde in #420
- sgl-3d: the tone map encodes sRGB for an output that stores what is written by @stevepryde in #412
- sgl-3d: refuse shader loops whose test or step reads a hoisted counter by @stevepryde in #421
- sgl-net: a failed UDP receive skips its datagram instead of ending the poll by @stevepryde in #391
- sgl-net: a UDP client confirms the first challenge it receives by @stevepryde in #394
- sgl-3d: local shadows redraw shader-driven casters as their inputs change by @stevepryde in #402
- sgl-3d: a diffuse-only light lights a coated base whole by @stevepryde in #410
- sgl-net: a connection the caller disconnects reports Disconnected { Local } once by @stevepryde in #422
- sgl-2d: a negative or non-finite text size draws nothing instead of panicking by @stevepryde in #470
- sgl-core: Grid2::filled returns GridError::TooLarge instead of panicking by @stevepryde in #475
- sgl-2d: a negative or NaN circle radius emits nothing by @stevepryde in #477
- sgl-net: a native WebSocket client tries every resolved address by @stevepryde in #478
- sgl-3d: the glTF loader decodes only the images a sampled map uses by @stevepryde in #483
- scripts: the mutants task fails instead of reporting a previous run's results by @stevepryde in #481
- sgl-2d: text lays out the same whatever sizes drew before by @stevepryde in #480
- sgl-net: a...
v0.4.0
What's Changed
- sgl-core: opt-in bounded fixed-tick catch-up (#270) by @stevepryde in #273
- sgl-2d: public SpritePass texture replacement and draw statistics (#271) by @stevepryde in #274
- sgl-net: retryable outbound backpressure (#267) by @stevepryde in #275
- sgl-net: independent reliable lanes with weighted scheduling (#268) by @stevepryde in #276
- SGL3D: programmable vertex and material shaders (#272) by @stevepryde in #277
- sgl-net: configurable large reliable messages and WebSocket read backpressure (#269) by @stevepryde in #278
- sgl-core: FixedClock accumulates exact Durations (#270 follow-up) by @stevepryde in #280
- sgl-net: UDP receive flow control for the threaded server by @stevepryde in #281
- sgl-net: WebSocket server poll reports only closes made before its drain by @stevepryde in #282
- SGL3D: measured volume paths for programmable transparent materials (#283) by @stevepryde in #284
- Release SGL 0.4.0 by @stevepryde in #285
- sgl-net: correct when reliable overflow closes the peer by @stevepryde in #286
Full Changelog: v0.3.0...v0.4.0