Streaming pop-in, edge-of-view retention + vehicle palette fixes

This commit is contained in:
mchughalex 2026-07-11 08:58:33 +01:00
parent 2854f562c9
commit 4776a8d514
3 changed files with 1003 additions and 43 deletions

View file

@ -21,6 +21,8 @@ REXCVAR_DECLARE(bool, skate3_native_render_scene_splines);
REXCVAR_DECLARE(bool, skate3_native_render_scene_quadlists); REXCVAR_DECLARE(bool, skate3_native_render_scene_quadlists);
REXCVAR_DECLARE(bool, skate3_native_render_scene_world_items); REXCVAR_DECLARE(bool, skate3_native_render_scene_world_items);
REXCVAR_DECLARE(bool, skate3_native_render_scene_dynamic_items); REXCVAR_DECLARE(bool, skate3_native_render_scene_dynamic_items);
REXCVAR_DECLARE(bool, skate3_native_render_scene_retain_offscreen);
REXCVAR_DECLARE(bool, skate3_native_render_scene_tex_lookaside);
REXCVAR_DECLARE(bool, skate3_native_render_scene_tex_revalidate); REXCVAR_DECLARE(bool, skate3_native_render_scene_tex_revalidate);
REXCVAR_DECLARE(bool, skate3_native_render_scene_mesh_revalidate); REXCVAR_DECLARE(bool, skate3_native_render_scene_mesh_revalidate);
REXCVAR_DECLARE(bool, skate3_native_render_scene_tex_mips); REXCVAR_DECLARE(bool, skate3_native_render_scene_tex_mips);
@ -221,6 +223,22 @@ void NativeDebugDialog::OnDraw(ImGuiIO& io) {
REXCVAR_GET(skate3_native_render_scene_quadlists), REXCVAR_GET(skate3_native_render_scene_quadlists),
"Non-indexed quad-list captures (particle systems; off by " "Non-indexed quad-list captures (particle systems; off by "
"default: render as white squares without sprite textures)")); "default: render as white squares without sprite textures)"));
REXCVAR_SET(
skate3_native_render_scene_retain_offscreen,
CvarCheckbox("Retain off-screen statics",
REXCVAR_GET(skate3_native_render_scene_retain_offscreen),
"Keep recently seen statics drawn while the game view-culls "
"them: the smoothed render camera trails the guest pose, so "
"without this world geometry visibly tears down right at the "
"screen edges during pans/traversal"));
REXCVAR_SET(
skate3_native_render_scene_tex_lookaside,
CvarCheckbox("Texture mip lookaside",
REXCVAR_GET(skate3_native_render_scene_tex_lookaside),
"Keep decodes displaced by streaming mip rebinds parked by "
"their fetch words and swap them back in instantly when the "
"words return; kills the black/white-then-reload decal "
"recycling while approaching"));
ImGui::SeparatorText("Overlays"); ImGui::SeparatorText("Overlays");
REXCVAR_SET(skate3_native_render_scene_2d, REXCVAR_SET(skate3_native_render_scene_2d,

File diff suppressed because it is too large Load diff

View file

@ -195,6 +195,13 @@ struct DrawItem {
// (ib_obj, vb_obj, world translation) render into the native outline mask // (ib_obj, vb_obj, world translation) render into the native outline mask
// (see kOutlineShaderSource). // (see kOutlineShaderSource).
bool selected = false; bool selected = false;
// Re-appended from the off-screen retention map (edge-of-view guard band):
// the game view-culled this item this frame, but the re-timed render
// camera trails the guest pose and can still see it. Retained items
// outlive their guest-side lifetime guarantees, so the render path draws
// only their exact cached decodes: no guest-memory reads, no heals, no
// miss enqueues.
bool retained = false;
// Bone palette snapshot taken on the game thread: raw staged rows, 3 // Bone palette snapshot taken on the game thread: raw staged rows, 3
// float4s per bone (column-vector affine [R | t], model -> world). The // float4s per bone (column-vector affine [R | t], model -> world). The
// guest staging bank is reused draw to draw, hence the copy. // guest staging bank is reused draw to draw, hence the copy.