Render continuously and optimize the glTF viewer

Remove vsync and dirty-flag frame gating, optimize PBR sampling and lighting, add a direct-to-canvas loadout, and preserve camera state on viewer resize.

Add regression coverage and update rendering documentation.

Amp-Thread-ID: https://ampcode.com/threads/T-01a0b382-1e79-712b-abd1-d29201c9bb5e
Co-authored-by: Heaust Azure <heaust.azure@gmail.com>
This commit is contained in:
Amp
2026-09-18 08:58:27 +00:00
co-authored by heaust
parent bc957cf40d
commit 4784ad7e87
16 changed files with 573 additions and 178 deletions
+17 -15
View File
@@ -1,34 +1,36 @@
use super::RenderData;
#[test]
fn dirty_signal_is_consumed_once() {
fn rendering_does_not_require_a_dirty_signal() {
let mut data = RenderData::new(64).unwrap();
assert!(data.rows("signals").is_some());
assert!(data.begin_render());
assert!(!data.begin_render());
data.mark_dirty();
assert!(data.begin_render());
assert!(!data.render_pending());
for dirty in [0.0, 1.0, 0.0] {
data.write_signal(5, dirty);
assert!(data.render_allowed());
data.update_signals(0.001, 2, 0.002, 0);
assert!(data.render_allowed());
}
}
#[test]
fn skip_and_bundle_signals_hold_dirty_work() {
fn skip_and_bundle_signals_still_block_rendering() {
let mut data = RenderData::new(64).unwrap();
assert!(data.begin_render());
data.write_signal(5, 0.0);
assert!(data.render_allowed());
data.write_signal(4, 1.0);
data.mark_dirty();
assert!(!data.begin_render());
assert!(!data.render_allowed());
data.write_signal(4, 0.0);
assert!(data.begin_render());
assert!(data.render_allowed());
data.write_signal(6, 1.0);
data.mark_dirty();
assert!(!data.begin_render());
assert!(!data.render_allowed());
data.write_signal(4, 1.0);
data.loadout_ready();
assert!(data.begin_render());
assert!(!data.render_allowed());
data.write_signal(4, 0.0);
assert!(data.render_allowed());
}
fn rows_of(data: &RenderData, name: &str) -> u32 {