pub struct RenderOptions {
pub backend: BackendPreference,
pub gpu: GpuRendererSettings,
pub clear_sky: Rgb,
pub gpu_mip_scan_dist: f32,
pub gpu_chunk_upload_budget: u32,
pub gpu_clip_upload_budget: u32,
pub gpu_sprite_lod_px: f32,
pub cpu_max_grid_vsid: u32,
pub cpu_render_threads: usize,
}Expand description
Construction-time options for SceneRenderer::new.
§Environment overrides (QE-C6)
Each GPU tuning knob below has a ROXLAP_* escape hatch, so a
shipped binary can be re-tuned from the shell. All of them are
read once, at SceneRenderer construction (never per frame),
the env value wins over the programmatic one, and unparseable
values are dropped with a log::warn!. On wasm there is no
process environment and the field values apply as-is.
| variable | overrides | values |
|---|---|---|
ROXLAP_GPU_POWER | gpu.power_preference | low / high |
ROXLAP_GPU_SPRITE_LOD_PX | gpu_sprite_lod_px | f32, screen px |
ROXLAP_GPU_MIP_SCAN_DIST | gpu_mip_scan_dist | f32, world units |
ROXLAP_GPU_CHUNK_BUDGET | gpu_chunk_upload_budget | u32, 0 = unbounded |
ROXLAP_GPU_CLIP_BUDGET | gpu_clip_upload_budget | u32, 0 = unbounded |
Other ROXLAP_* variables you may have seen (ROXLAP_GPU,
ROXLAP_SCENE, ROXLAP_CAPTURE, …) belong to the demo hosts, not
the library — backend selection is backend,
decided by your code.
Fields§
§backend: BackendPreferenceWhich backend to build (QE.7b — replaces want_gpu: bool;
migrate want_gpu: true → BackendPreference::PreferGpu,
false → BackendPreference::Cpu).
gpu: GpuRendererSettingsSettings forwarded to roxlap_gpu::GpuRenderer when the GPU
backend is selected.
clear_sky: RgbPacked 0x00RRGGBB (alpha ignored) the empty/clear frame fills
with until a scene render lands. Also the CPU sky-miss colour
default if a frame supplies none.
gpu_mip_scan_dist: f32GPU scene-grid LOD scan distance in world units (GPU.11.1):
rays farther than this from the camera sample coarser chunk
mips. QE.2a — construction-time here (was a per-frame
FrameParams field); the ROXLAP_GPU_MIP_SCAN_DIST env var
still overrides it as a user-side escape hatch. Ignored by the
CPU backend (its mip ladder comes from
OpticastSettings::mip_scan_dist).
gpu_chunk_upload_budget: u32GPU per-frame dirty-chunk install budget (QE.2c — was env-only
ROXLAP_GPU_CHUNK_BUDGET, which still overrides). Each chunk
install issues several queue.write_buffer calls; a big batch
can exhaust the device staging pool (seen as egui-wgpu panics on
Mesa/NVK while flying fast). Small budget = bounded per-frame
writes, more terrain pop-in when moving quickly. 0 =
unbounded.
gpu_clip_upload_budget: u32GPU frames-per-staging-flush while registering a flipbook clip
(QE.2c — was env-only ROXLAP_GPU_CLIP_BUDGET, which still
overrides). 0 = unbounded.
gpu_sprite_lod_px: f32GPU sprite mip-LOD threshold (QE.8; ROXLAP_GPU_SPRITE_LOD_PX
overrides): the pass steps to a coarser sprite mip once a
mip-0 voxel would project smaller than this many screen pixels.
1.0 (the default) is the “don’t go sub-pixel” threshold and
keeps GPU sprites visually identical to the CPU backend (which
has no sprite LOD); raise it to trade sprite fidelity for
distant-sprite speed (the pre-QE.8 behaviour was 4.0, which
visibly densified thin/hollow translucent models at range).
cpu_max_grid_vsid: u32ignored — the DDA renderer replaced the strip-parallel opticast and needs no scratch-pool pre-sizing
Unused. Sized the strip-parallel opticast’s per-frame scratch pool; the per-pixel DDA renderer that replaced it needs no pre-sizing, so the value is ignored.
cpu_render_threads: usizeignored — the DDA renderer parallelises over the rayon pool; bound it with RAYON_NUM_THREADS
Unused. Set the strip-parallel opticast’s thread count; the DDA
renderer parallelises internally over the rayon pool (bound it
with RAYON_NUM_THREADS if needed), so the value is ignored.
Trait Implementations§
Source§impl Clone for RenderOptions
impl Clone for RenderOptions
Source§fn clone(&self) -> RenderOptions
fn clone(&self) -> RenderOptions
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for RenderOptions
impl RefUnwindSafe for RenderOptions
impl Send for RenderOptions
impl Sync for RenderOptions
impl Unpin for RenderOptions
impl UnsafeUnpin for RenderOptions
impl UnwindSafe for RenderOptions
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more