Files
vtroc7 acc57a5c9d Make underbarrel attachments work across families, bound transport and qualify match publication
- Underbarrel attachments work across IW4, IW5, T5 and T6, including
  per-family impact FX, T5 flamethrower streams and T6 launcher fuses.
- Viewmodel notetrack sounds play in third person.
- Transport operations and queues are bounded; Quinn congestion control
  returns to its default.
- Match publication, presentation context and prepared content semantics
  are qualified and validated; cosmetic and entity occurrence lifecycles
  are preserved.
- GPU skinning batches within supported device budgets.
- Immutable UI projections and correlated class replies are reconciled.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 16:28:56 +03:00

51 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Render: what lives where
`render_frontend` reads the presented snapshot; `render_gpu` writes pixels and
owns `wgpu`. Rendering decides no gameplay and never writes `AuthorityWorld`.
| crate | role |
|---|---|
| `render_frontend` | scene preparation, culling, occupancy adapters, frame products and tessellation |
| `render_scene` | lighting, frustum, camera and occupancy storage; static light/BSP data publish on installation and clear on teardown |
| `render_anim`, `render_fx` | animation poses and effects |
| `render_frame` | immutable frame products, source revisions, packed segments and packing |
| `render_material`, `render_backend` | material tables and draw-list views |
| `render_gpu` | GPU preparation and recording |
| `render` | composition, extraction and diagnostics |
```text
zone → asset IR → prepare/scene/ → assemble/drawsurf/
→ sorted draw list → tessellation → material execution
→ SM3/WGSL → GPU contract → wgpu
```
One drawsurf machine accepts world, static-model and viewmodel emitters.
Lighting uses `lighting_iw4`, `smodel_lighting.rs` and `model_lighting_atlas.rs`;
shadows use `sun_shadow.rs`. `StaticSunAndFx` overlaps static sun preparation
with FX, joins before frame products consume results, then merges dynamic
casters. Sun model draws reuse colour geometry's index buffers.
Retained lanes in `retained_list/` key static reuse on world, material,
visibility and eye/LOD. FX also keys on distortion; glass re-sorts for each eye.
GPU skinning computes FPV and remote body packed vertices before native colour/shadows.
Shapes use stable IDs and retire with live jobs; invalid jobs refuse geometry.
GPU modules live in `render_gpu/src/drawsurf/colour_submit/`:
* `publication.rs` seals a frame against its installed world; both generations must match.
* `geometry.rs` and `residency.rs` track capacity, live length, allocation generation and uploaded revision. Shrinking retains buffers; changed packed segments upload alone.
* `binding.rs` and `constants.rs` cache textures and constants. Recording checks prepared work and table epochs against the extracted frame.
* `prepare_camera.rs` and `shadow_prepare.rs` prepare concurrently after shared shadow-view installation. Shadow frames remove dynamic tails and retain static patch targets. Multiple camera views refuse with `MultipleCameraViews`.
* `record.rs`, `encode.rs`, `shadow_encode.rs` and `indirect.rs` record draws. `IW4L_MULTI_DRAW` plus device support merges adjacent compatible commands while preserving order.
`extract.rs` replaces `InstalledRenderWorld` when geometry, ports or SMC maps
change and publishes `PublishedRenderFrame` each frame. `d3d9_decl`, `d3d9_sm3`
and `d3d9_state` describe D3D9 semantics; GPU adapters convert them to wgpu.
`session` installs matches; `assets` supplies bytes. Runtime switches use env
variables (`IW4L_SINGLE_CELL`, `IW4L_SUN_SHADOW_*`); observation uses
[`PERF.md`](PERF.md).
Film vision presets come from map/common fastfiles. Console `visionSetNaked`
and `visionReset` transition `FilmVisionView` between presets.
Packed skinning uses bounded output pages and per-batch palettes under actual device limits.
`IW4L_SKIN_RESIDENT_BYTES` defaults to 1073741824 (range 1048576–4294967296); invalid settings refuse support.
Readiness preflights the worst admitted player/corpse loadouts and FPV assembly, including replacement/retirement costs.
Cold shapes can leave GPU residency while their immutable CPU products remain valid; retired bytes stay counted until queue completion.
Capacity refusal is explicit and stops required presentation; there is no CPU skinning fallback.