Skip to content

Releases: stevepryde/sgl

v0.5.0

Choose a tag to compare

@stevepryde stevepryde released this 24 Oct 09:38
b1b774e

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::new sets
    shape: None; a SpriteInstance struct literal written without
    ..SpriteInstance::new(..) must add shape: 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

Choose a tag to compare

@stevepryde stevepryde released this 13 Oct 10:23

Fixed colour tone mapping, supporting ACES, AgX, Khronos. Default to Khronos.
Full Changelog: v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@stevepryde stevepryde released this 13 Oct 10:21
be1ca89

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...
Read more

v0.4.0

Choose a tag to compare

@stevepryde stevepryde released this 09 Oct 12:26

What's Changed

Full Changelog: v0.3.0...v0.4.0