Skip to content

Releases: gmrdad82/pfx

v0.28.1

Choose a tag to compare

@gmrdad82 gmrdad82 released this 12 Oct 20:13
v0.28.1
6baba65

Fixed

  • trace: Sobol shifts each pixel's patterns by a random offset per dimension (Cycles' Cranley-Patterson rotation), so scenes lit by small or narrow lights match PCG's mean (Manfred's workshop: -0.11% before, +0.01% now) with the same noise gain.
  • editor: the stored shots follow egui 0.36's tighter rows.

v0.28.0

Choose a tag to compare

@gmrdad82 gmrdad82 released this 12 Oct 18:56
v0.28.0
ca27a37

Added

  • trace: Cycles' tabulated Sobol sampler, the default (Sampler::Pcg or PFX_TRACE_SAMPLER=pcg keeps PCG); the same noise in about half the samples.

Changed

  • pfx sends no crash reports and writes no job records: pfx-report left the engine and its CLI; a game that wants reports wires its own.
  • render: finals take 16 to 64 samples and drafts 6 to 12, PCG's noise at 32 to 128 and 8 to 16; the neutral desk's 4K final traces in 7.9 s of GPU time instead of 15.
  • trace: on scenes lit by small or narrow lights Sobol's mean sits up to 0.15% under PCG's (Manfred's workshop: 0.11%, about 0.25/255).

v0.27.0

Choose a tag to compare

@gmrdad82 gmrdad82 released this 12 Oct 15:09
v0.27.0
88e1809

Added

  • trace: ray queries over a TLAS where the adapter offers them (Vulkan, DX12, Metal on Apple Silicon), the software BVH elsewhere; 2.6x faster 4K finals and 2.3x faster drafts on the neutral desk.
  • docs: wgpu30.md, the changes an app that uses wgpu or egui directly makes to move with pfx.

Changed

  • move to wgpu 30.0.1, naga 30 and egui 0.36.2.
  • archive: a pre-release tag such as v1.0.0-rc.1 pins a master like vX.Y.Z, in archive import and render's --rev.
  • editor: clear egui's texture deltas once painted.
  • editor: the shell's App::ui takes a Ui instead of a Context.
  • editor: drop the pgpu play hook.
  • trace: cut a dense strip into column pieces before dropping lanes.
  • bake: the batch Frame is 176 bytes with the column field.

Moving an app that uses wgpu or egui directly: docs/wgpu30.md.

v0.26.0

Choose a tag to compare

@gmrdad82 gmrdad82 released this 12 Oct 04:04
v0.26.0
79c2646

Added

  • denoise: port Open Image Denoise's RT filter to wgpu compute.
  • trace: windows of a larger frame and a per-round adaptive report.
  • live: build a plate off the render thread and swap it in.
  • gpu: enable VK_EXT_image_drm_format_modifier when the adapter offers it.
  • archive: import a master an app made itself.
  • ci: lint and build the game crates and the denoiser on macOS.

Changed

  • trace: start every trace at 64 lanes, ten times faster on ordinary scenes.
  • trace: aim its bands at 10 ms.
  • render: denoise finals and drafts; finals stop at 128 samples, drafts at 16.
  • ci: run the gate as a parallel matrix, nightly too.
  • check every text file out with LF line endings.

Fixed

  • gpu: open Vulkan with DRM format modifiers on Linux only, so pfx-gpu builds on macOS.

pfx 0.25.3

Choose a tag to compare

@gmrdad82 gmrdad82 released this 11 Oct 19:01
v0.25.3
984c77b

pfx 0.25.3

  • System ffmpeg. Both kinds of render (pfx render and the asset clips) now encode with the ffmpeg on PATH instead of downloading and unpacking a pinned archive into the machine cache. Install your system's ffmpeg with libx264 and zscale; ffmpeg 9 or later is recommended, since earlier releases write no colour range into the ProRes alpha master. Manifests record the ffmpeg used as {path, version, sha256} in place of the archive's url and sha256. crates/run/render.toml keeps only the moved dependencies, and pfx-run no longer depends on ureq or toml. An old ffmpeg/ folder in the cache is still listed by pfx cache and pfx cache --prune drops it once it has gone unused for 30 days.
  • Pacing. The timing a paced slice hands to the next Turns::add is now kept per thread, so pacers on different threads no longer classify each other's adds.
  • CI runs on Ubuntu 26.04 with the system ffmpeg installed.

pfx 0.25.2

Choose a tag to compare

@gmrdad82 gmrdad82 released this 08 Oct 09:29
v0.25.2
83044d0

A patch release: pfx steam stage accepts a game build reached through the tree's own target symlink.

Install the pfx tool with cargo install --locked --git https://github.com/gmrdad82/pfx --tag v0.25.2 pfx, and depend on a crate by the same tag, for example pfx-game = { git = "https://github.com/gmrdad82/pfx", tag = "v0.25.2" }.

What's new

  • pfx steam stage follows the tree's target link. A clone that shares warm builds by making its target folder a symlink into a cache writes its binaries inside the tree by name but outside it once resolved, and v0.25.1 refused them. A depot's path may now also sit under the folder that the caller's own <tree>/target link resolves to, alongside the caller's git tree and the CARGO_TARGET_DIR pfx runs with. A link that holds the caller's tree widens nothing, the manifest itself still has to sit in the tree, and a path outside all of them is refused with a message that names every folder it was checked against (docs/steam.md, "steam.toml").

Notes for callers

  • No API changes. A pfx steam stage that was refused for a path under its tree's target link now stages; every other refusal is unchanged, and a refusal's message now lists the target link's folder when there is one.

pfx 0.25.1

Choose a tag to compare

@gmrdad82 gmrdad82 released this 08 Oct 07:59
v0.25.1
21b0cd4

A patch release: pfx steam stage accepts a game build from a shared cargo target folder.

Install the pfx tool with cargo install --locked --git https://github.com/gmrdad82/pfx --tag v0.25.1 pfx, and depend on a crate by the same tag, for example pfx-game = { git = "https://github.com/gmrdad82/pfx", tag = "v0.25.1" }.

What's new

  • pfx steam stage stages builds under CARGO_TARGET_DIR. A depot's path may now sit in the caller's git tree or in the CARGO_TARGET_DIR that pfx runs with, so a game built into a shared target folder outside its clone stages without copying its binaries in first. A symlinked target folder is followed by its own name. A CARGO_TARGET_DIR that holds the caller's tree widens nothing, the manifest itself still has to sit in the tree, and a path outside both is refused with a message that names the target folder (docs/steam.md, "steam.toml").

Notes for callers

  • No API changes. A pfx steam stage that was refused for a path under its CARGO_TARGET_DIR now stages; every other refusal is unchanged.

pfx 0.25.0

Choose a tag to compare

@gmrdad82 gmrdad82 released this 08 Oct 05:25
v0.25.0
35f8688

The first public release of pfx, a game and render engine in Rust. Earlier versions were developed privately and their tags are not in this repository, so games pin v0.25.0 or later. These notes cover what changed since 0.24.1, the last private release.

Install the pfx tool with cargo install --locked --git https://github.com/gmrdad82/pfx --tag v0.25.0 pfx, and depend on a crate by the same tag, for example pfx-game = { git = "https://github.com/gmrdad82/pfx", tag = "v0.25.0" }. The README covers the rest.

What's new

  • Open source under MIT. Every crate declares license = "MIT". NOTICE.md lists the licence of each font, image and model the repository ships. TRADEMARKS.md keeps the names and logos reserved. The repository also has a code of conduct and a security policy.
  • Every dependency comes from a public source over https. pfx-scene (the scene format) and pfx-report (the reporting hook) are pinned by their public v0.1.0 tags.
  • The editor crates are part of the workspace. pfx-editor-style, pfx-editor-shell, pfx-editor-doc, pfx-editor-toml and pfx-editor-viewport live in crates/editor-*, with their tests and an editor example. pfx-editor and pfx-theme use them by path, and a game or tool takes them at the same tag as the other pfx crates (docs/editor-crates.md).
  • Bound text in scenes. A [text.*] string's {key} tokens are filled at load from a process-wide table (pfx_load::scene::bind, bound, filled). pfx_game::Config::bind_text() binds the game's name and version before a scene loads, in the game, headless and in <game> edit. pfx edit <project> binds the project's name and its Cargo version. A token with no value stays as written, and pfx bake binds nothing.
  • A prefab's text moves with its placement. A prefab's [text.*] is placed by the placement's world matrix, like its meshes. A scene's own text is unchanged.
  • The scaffold shows its version. pfx new puts v{version} under the wordmark in the default scene, in IBM Plex Mono, which ships unmodified with its OFL under content/fonts/.
  • Command-line errors follow clap's form. pfx and every game's launcher answer input they can't parse the way clap does: clap's wording, one Usage: line, the --help hint and exit code 2. The answer is coloured in a terminal and plain otherwise (NO_COLOR, TERM=dumb, CLICOLOR=0). A bare pfx prints that error rather than the help. pfx help and pfx -V work. Bad values that used to fail at run time are checked before anything starts. The shared code is pfx_core::cli.
  • Crash reports and job progress go through pfx-report. It is a small hook crate whose every call does nothing. A build from this repository sends no reports and writes no job records, and pfx --version says so on a second line, crash reports: off (this build sends none). The engine's library crates never link it. The ping, jobs and estate features are gone.
  • The archive root comes from the build. pfx render copies deliberate masters to an archive only when PITO_ARCHIVE is set, or when the build set PFX_ARCHIVE_ROOT. Masters go to <root>/Masters/pfx/<product>/…, and the catalog is <root>/Masters/catalog.jsonl with tool pfx. pfx archive --reindex takes each entry's path from where its manifest sits. pfx re-runs itself in a pinned systemd build slice only when the build set PFX_MACHINE_ENV. Other builds run where they are started.
  • The input glyph font is named "PITO Input Glyphs" (PostScript PITOInputGlyphs-Regular). Its glyphs are unchanged.
  • A public gate. bin/gate runs formatting, clippy with -D warnings, the build, the unit tests and the repository checks with plain cargo. CI runs it on Rust 1.97.1.

Notes for callers

  • Behaviour change: a prefab's [text.*] used to sit at its own at in world space. It is now relative to the prefab's placement.
  • Behaviour change: pfx edit with no path, and <game> edit with an extra argument in a scaffolded game, exit 2 instead of 1. A launcher's unknown command or flag, and a command's usage error, print clap's shape instead of <game>: no command … and <game> <command>: ….
  • Gone: pfx_bench::USAGE, pfx_text::subset::USAGE, and the root package's ping, jobs and estate features.
  • Added: pfx_core::cli, pfx_game::Commands::usage(command, shape), pfx_game::Config::bind_text, pfx_load::scene::{bind, bound, filled}, pfx_project::Project::version, pfx_text::subset::{parse, Request} and pfx_assets::check. A game that declares an argument-free command calls .usage("<command>", ""), and the scaffold does so for edit.
  • Moved: the editor crates come from this repository as pfx-editor-*, at the same tag as every other pfx crate.
  • Archive: a build without PFX_ARCHIVE_ROOT archives only with PITO_ARCHIVE set. The archive's layout is Masters/pfx/…, with the catalog at Masters/catalog.jsonl.
  • crates/run/render.toml no longer lists the engine's earlier repository name under [[moved]].