use crate::entity::RenderEntity;
use std::collections::HashMap;
pub struct UiFrameInputs {
pub rects: Vec<crate::ui_data::UiRect>,
pub rect_entities: Vec<Option<RenderEntity>>,
pub images: Vec<crate::ui_data::UiImage>,
pub text_meshes: Vec<crate::ui_data::UiTextInstance>,
pub render_slots: crate::ui_data::RenderSlotAllocator,
pub background_color: Option<nalgebra_glm::Vec4>,
}
pub struct ViewInputs {
pub active_camera: Option<RenderEntity>,
pub uptime_milliseconds: u64,
pub delta_time: f32,
pub viewport_size: Option<(u32, u32)>,
pub camera_tile_rects: HashMap<RenderEntity, crate::config::ViewportRect>,
pub camera_tile_render_iteration: u32,
pub active_viewport_rect: Option<crate::config::ViewportRect>,
}
#[derive(Clone, Copy)]
pub struct CameraMatricesInputs {
pub view: nalgebra_glm::Mat4,
pub projection: nalgebra_glm::Mat4,
pub camera_position: nalgebra_glm::Vec3,
}
#[derive(Clone, Copy)]
pub struct CameraProjectionParams {
pub z_near: f32,
pub z_far: f32,
pub y_fov_rad: f32,
pub aspect: f32,
pub orthographic: Option<(f32, f32)>,
}
impl Default for CameraProjectionParams {
fn default() -> Self {
Self {
z_near: 0.1,
z_far: 1000.0,
y_fov_rad: std::f32::consts::FRAC_PI_4,
aspect: 1.78,
orthographic: None,
}
}
}
#[derive(Clone)]
pub struct CameraFrameInputs {
pub entity: RenderEntity,
pub matrices: Option<CameraMatricesInputs>,
pub projection: CameraProjectionParams,
pub constrained_aspect: Option<f32>,
pub effective_shading: crate::config::EffectiveShading,
pub update_mode: crate::config::ViewportUpdateMode,
pub world_transform: Option<nalgebra_glm::Mat4>,
}
pub enum RendererCommand {
UploadUiImageLayer {
layer: u32,
rgba_data: Vec<u8>,
width: u32,
height: u32,
},
LoadHdrSkybox {
hdr_data: Vec<u8>,
},
ReloadTexture {
name: String,
rgba_data: Vec<u8>,
width: u32,
height: u32,
},
SetColorLut {
data: Vec<u8>,
},
CaptureScreenshot {
path: Option<std::path::PathBuf>,
max_dimension: Option<u32>,
},
}
#[derive(Default)]
pub struct LinesFrameInputs {
pub lines: Vec<crate::wgpu::passes::geometry::lines::GpuLineData>,
pub bounding_volumes: Option<Vec<crate::wgpu::passes::geometry::lines::GpuBoundingVolumeData>>,
pub normals: Option<Vec<crate::wgpu::passes::geometry::lines::GpuNormalData>>,
}
pub struct FrameInputs {
pub commands: Vec<RendererCommand>,
pub cameras: Vec<CameraFrameInputs>,
pub active_camera_frame: Option<CameraFrameInputs>,
pub fallback_shading: crate::config::EffectiveShading,
pub pick_request: Option<(u32, u32)>,
pub has_skinned_meshes: bool,
pub mesh_frame_state: Option<crate::mesh_state::MeshRenderStateInner>,
pub dirty_world_spheres: Vec<(nalgebra_glm::Vec3, f32)>,
pub global_dirty_signal: bool,
pub mouse_position: nalgebra_glm::Vec2,
pub force_render_cameras: std::collections::HashSet<RenderEntity>,
pub debug_lines: LinesFrameInputs,
}
#[derive(Default)]
pub struct FrameOutputs {
pub viewport_texture_sizes: Vec<(u32, u32)>,
pub force_render_cleared: Vec<RenderEntity>,
pub frame_executed: bool,
}
pub struct RenderInputs {
pub settings: crate::config::RenderSettings,
pub debug_draw: crate::config::DebugDraw,
pub editor_selection: crate::config::EditorSelection,
pub scene: crate::config::RendererState,
pub ibl_views: crate::config::IblViews,
pub shadow_atlas: crate::wgpu::passes::shadow_depth::atlas::SpotlightAtlasAssignment,
pub wind: crate::wind::Wind,
pub mesh_cache: crate::mesh_cache::MeshCache,
pub texture_cache: crate::wgpu::texture_cache::TextureCache,
pub pending_particle_textures: Vec<crate::particles::ParticleTextureUpload>,
pub ui: UiFrameInputs,
pub view: ViewInputs,
pub world_id: u64,
pub frame: FrameInputs,
#[cfg(feature = "grass")]
pub grass: crate::grass_config::GrassSettings,
#[cfg(feature = "terrain")]
pub terrain: crate::terrain_config::TerrainSettings,
#[cfg(feature = "terrain")]
pub terrain_render: crate::terrain_config::TerrainRenderState,
}