pub use crate::resources::device_resources::ContentResources;
pub use crate::resources::device_resources::DeviceResources;
pub(crate) use crate::resources::device_resources::DualPipeline;
pub(crate) use crate::resources::device_resources::ImageSliceResources;
pub(crate) use crate::resources::device_resources::ImplicitResources;
pub(crate) use crate::resources::device_resources::OutlineResources;
pub(crate) use crate::resources::device_resources::PickResources;
pub(crate) use crate::resources::device_resources::ProjectedTetResources;
pub(crate) use crate::resources::device_resources::ScatterViewportState;
pub(crate) use crate::resources::device_resources::ScreenImageResources;
pub(crate) use crate::resources::device_resources::ShadowCullState;
pub(crate) use crate::resources::device_resources::SubHighlightResources;
pub(crate) use crate::resources::device_resources::ViewportCullState;
#[allow(deprecated)]
pub use crate::resources::device_resources::ViewportGpuResources;
pub(crate) use crate::resources::device_resources::ViewportHdrState;
pub use crate::resources::material::colourmap_data::ColourmapId;
pub use crate::resources::material::matcap_data::BuiltinMatcap;
pub use crate::resources::material::matcap_data::MatcapId;
pub use crate::resources::material::textures::GpuTexture;
pub use crate::resources::memory::ResidentBytes;
pub use crate::resources::memory::TextureMemoryStats;
pub use crate::resources::memory::VramBudget;
pub use crate::resources::mesh::gpu_mesh::GpuMesh;
pub use crate::resources::mesh::instancing::BatchMeta;
pub(crate) use crate::resources::mesh::instancing::InstanceAabb;
pub(crate) use crate::resources::mesh::instancing::InstanceData;
pub(crate) use crate::resources::mesh::instancing::ObjectUniform;
pub(crate) use crate::resources::mesh::instancing::PickInstance;
pub use crate::resources::mesh::meshes::MeshData;
pub(crate) use crate::resources::overlay::highlight::CurveMeshOutlineItem;
pub(crate) use crate::resources::overlay::highlight::OutlineEdgeUniform;
pub(crate) use crate::resources::overlay::highlight::OutlineObjectBuffers;
pub(crate) use crate::resources::overlay::highlight::OutlineUniform;
pub(crate) use crate::resources::overlay::highlight::RawGeomOutlineBuffers;
pub(crate) use crate::resources::overlay::highlight::ScreenRectOutlineBuffers;
pub(crate) use crate::resources::overlay::highlight::SplatOutlineBuffers;
pub(crate) use crate::resources::overlay::highlight::SplatOutlineMaskUniform;
pub(crate) use crate::resources::overlay::highlight::SubHighlightGpuData;
pub(crate) use crate::resources::overlay::overlay_shape::OverlayShapeGpuData;
pub(crate) use crate::resources::overlay::overlay_shape::OverlayShapeTexBatch;
pub(crate) use crate::resources::overlay::overlay_shape::OverlayShapeTexVertex;
pub(crate) use crate::resources::overlay::overlay_shape::OverlayShapeTextureEntry;
pub(crate) use crate::resources::overlay::overlay_shape::OverlayShapeVertex;
pub(crate) use crate::resources::overlay::overlay_text::LabelGpuData;
pub(crate) use crate::resources::overlay::overlay_text::OverlayTextVertex;
pub(crate) use crate::resources::overlay::overlays::BackdropBlurState;
pub(crate) use crate::resources::overlay::overlays::GridUniform;
pub(crate) use crate::resources::overlay::overlays::GroundPlaneUniform;
pub(crate) use crate::resources::overlay::overlays::OverlayUniform;
pub use crate::resources::overlay::overlays::OverlayVertex;
pub(crate) use crate::resources::postprocess::lic::LicAdvectUniform;
pub(crate) use crate::resources::postprocess::lic::LicObjectUniform;
pub use crate::resources::postprocess::lic::LicSurfaceGpuData;
pub(crate) use crate::resources::postprocess::uniforms::AtlasBlitUniform;
pub(crate) use crate::resources::postprocess::uniforms::BloomUniform;
pub(crate) use crate::resources::postprocess::uniforms::ContactShadowUniform;
pub(crate) use crate::resources::postprocess::uniforms::DofUniform;
pub(crate) use crate::resources::postprocess::uniforms::ShadowAtlasUniform;
pub(crate) use crate::resources::postprocess::uniforms::SsaoUniform;
pub(crate) use crate::resources::postprocess::uniforms::ToneMapUniform;
pub(crate) use crate::resources::scivis::gaussian_splat::GaussianSplatDrawData;
pub(crate) use crate::resources::scivis::gaussian_splat::GaussianSplatStore;
pub(crate) use crate::resources::scivis::glyph::GlyphBaseMesh;
pub use crate::resources::scivis::glyph::GlyphGpuData;
pub use crate::resources::scivis::glyph::TensorGlyphGpuData;
pub use crate::resources::scivis::image::ScreenImageGpuData;
pub use crate::resources::scivis::point_cloud::PointCloudGpuData;
pub use crate::resources::scivis::polyline::PolylineGpuData;
pub use crate::resources::scivis::sprite::SpriteGpuData;
pub use crate::resources::scivis::tube::StreamtubeGpuData;
pub(crate) use crate::resources::volume::tetmesh::GpuProjectedTetMesh;
pub(crate) use crate::resources::volume::tetmesh::ProjectedTetChunk;
pub(crate) use crate::resources::volume::tetmesh::ProjectedTetUniform;
pub(crate) use crate::resources::volume::volumes::ImageSliceGpuData;
pub use crate::resources::volume::volumes::VolumeGpuData;
pub(crate) use crate::resources::volume::volumes::VolumeSurfaceSliceGpuData;
crate::resources::handle::registry_handle! {
pub struct VolumeId;
}
crate::resources::handle::registry_handle! {
pub struct ProjectedTetId;
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AttributeKind {
Vertex,
Cell,
Face,
FaceColour,
Edge,
Halfedge,
Corner,
}
#[derive(Debug, Clone)]
pub struct AttributeRef {
pub name: String,
pub kind: AttributeKind,
}
#[derive(Debug, Clone)]
pub enum AttributeData {
Vertex(Vec<f32>),
Cell(Vec<f32>),
Face(Vec<f32>),
FaceColour(Vec<[f32; 4]>),
Edge(Vec<f32>),
Halfedge(Vec<f32>),
Corner(Vec<f32>),
VertexVector(Vec<[f32; 3]>),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum BuiltinColourmap {
Viridis = 0,
Plasma = 1,
Greyscale = 2,
Coolwarm = 3,
Rainbow = 4,
Magma = 5,
Inferno = 6,
Turbo = 7,
Jet = 8,
RdBu = 9,
}
#[repr(C)]
#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub struct Vertex {
pub position: [f32; 3],
pub normal: [f32; 3],
pub colour: [f32; 4],
pub uv: [f32; 2],
pub tangent: [f32; 4],
}
impl Vertex {
pub fn buffer_layout() -> wgpu::VertexBufferLayout<'static> {
wgpu::VertexBufferLayout {
array_stride: std::mem::size_of::<Vertex>() as wgpu::BufferAddress,
step_mode: wgpu::VertexStepMode::Vertex,
attributes: &[
wgpu::VertexAttribute {
offset: 0,
shader_location: 0,
format: wgpu::VertexFormat::Float32x3,
},
wgpu::VertexAttribute {
offset: 12,
shader_location: 1,
format: wgpu::VertexFormat::Float32x3,
},
wgpu::VertexAttribute {
offset: 24,
shader_location: 2,
format: wgpu::VertexFormat::Float32x4,
},
wgpu::VertexAttribute {
offset: 40,
shader_location: 3,
format: wgpu::VertexFormat::Float32x2,
},
wgpu::VertexAttribute {
offset: 48,
shader_location: 4,
format: wgpu::VertexFormat::Float32x4,
},
],
}
}
}
pub(crate) const SHADOW_ATLAS_SIZE: u32 = 4096;
#[repr(C)]
#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub struct CameraUniform {
pub view_proj: [[f32; 4]; 4],
pub eye_pos: [f32; 3],
pub _pad: f32,
pub forward: [f32; 3],
pub _pad1: f32,
pub inv_view_proj: [[f32; 4]; 4],
pub view: [[f32; 4]; 4],
}
#[repr(C)]
#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub struct SingleLightUniform {
pub light_view_proj: [[f32; 4]; 4], pub pos_or_dir: [f32; 3], pub light_type: u32, pub colour: [f32; 3], pub intensity: f32, pub range: f32, pub inner_angle: f32, pub outer_angle: f32, pub _pad_align: u32, pub spot_direction: [f32; 3], pub point_shadow_slot: i32, pub point_shadow_near: f32, pub _pad: [f32; 3], }
#[repr(C)]
#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub struct LightsUniform {
pub count: u32, pub shadow_bias: f32, pub shadows_enabled: u32, pub debug_vis_mode: u32, pub sky_colour: [f32; 3], pub hemisphere_intensity: f32, pub ground_colour: [f32; 3], pub debug_vis_scale: f32, pub ibl_enabled: u32, pub ibl_intensity: f32, pub ibl_rotation: f32, pub show_skybox: u32, pub debug_vis_split_x: f32, pub _pad_dbg: [u32; 3], }
pub const MAX_SCENE_LIGHTS: usize = 512;
pub type LightUniform = LightsUniform;
#[repr(C)]
#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub(crate) struct FrustumPlane {
pub(crate) normal: [f32; 3],
pub(crate) distance: f32,
}
#[repr(C)]
#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub(crate) struct FrustumUniform {
pub(crate) planes: [FrustumPlane; 6],
pub(crate) instance_count: u32,
pub(crate) batch_count: u32,
pub(crate) shadow_pass: u32,
pub(crate) do_occlusion: u32,
pub(crate) view_proj: [[f32; 4]; 4],
pub(crate) viewport: [f32; 2],
pub(crate) _pad0: [f32; 2],
}
const _: () = assert!(std::mem::size_of::<FrustumUniform>() == 192);
#[repr(C)]
#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub(crate) struct ClipPlanesUniform {
pub(crate) planes: [[f32; 4]; 6], pub(crate) count: u32, pub(crate) _pad0: u32, pub(crate) viewport_width: f32, pub(crate) viewport_height: f32, }
pub const CLIP_VOLUME_MAX: usize = 4;
#[repr(C)]
#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ClipVolumeEntry {
pub volume_type: u32,
#[doc(hidden)]
pub _pad: [u32; 3],
pub center: [f32; 3],
pub radius: f32,
pub half_extents: [f32; 3],
#[doc(hidden)]
pub _pad1: f32,
pub col0: [f32; 3],
#[doc(hidden)]
pub _pad2: f32,
pub col1: [f32; 3],
#[doc(hidden)]
pub _pad3: f32,
pub col2: [f32; 3],
#[doc(hidden)]
pub _pad4: f32,
}
impl ClipVolumeEntry {
pub fn from_box(center: [f32; 3], half_extents: [f32; 3], orientation: [[f32; 3]; 3]) -> Self {
Self {
volume_type: 2,
_pad: [0; 3],
center,
radius: 0.0,
half_extents,
_pad1: 0.0,
col0: orientation[0],
_pad2: 0.0,
col1: orientation[1],
_pad3: 0.0,
col2: orientation[2],
_pad4: 0.0,
}
}
pub fn from_sphere(center: [f32; 3], radius: f32) -> Self {
Self {
volume_type: 3,
_pad: [0; 3],
center,
radius,
..bytemuck::Zeroable::zeroed()
}
}
pub fn from_cylinder(center: [f32; 3], axis: [f32; 3], radius: f32, half_length: f32) -> Self {
Self {
volume_type: 4,
_pad: [0; 3],
center,
radius,
half_extents: [half_length, 0.0, 0.0],
_pad1: 0.0,
col0: axis,
..bytemuck::Zeroable::zeroed()
}
}
}
#[repr(C)]
#[derive(Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
pub struct ClipVolumesUniform {
pub count: u32,
#[doc(hidden)]
pub _pad: [u32; 3],
pub volumes: [ClipVolumeEntry; CLIP_VOLUME_MAX],
}
#[deprecated(
since = "0.9.0",
note = "use ClipVolumesUniform and ClipVolumeEntry instead"
)]
#[repr(C)]
#[derive(Copy, Clone)]
pub struct ClipVolumeUniform {
pub volume_type: u32,
pub _pad0: [u32; 3],
pub plane_normal: [f32; 3],
pub plane_dist: f32,
pub box_center: [f32; 3],
pub _pad1: f32,
pub box_half_extents: [f32; 3],
pub _pad2: f32,
pub box_col0: [f32; 3],
pub _pad3: f32,
pub box_col1: [f32; 3],
pub _pad4: f32,
pub box_col2: [f32; 3],
pub _pad5: f32,
pub sphere_center: [f32; 3],
pub sphere_radius: f32,
}
#[allow(deprecated)]
impl ClipVolumeUniform {
#[deprecated(
since = "0.9.0",
note = "use ClipVolumeEntry::from_box / from_sphere instead"
)]
pub fn from_clip_shape(shape: &crate::renderer::ClipShape) -> Self {
let mut u: Self = bytemuck::Zeroable::zeroed();
match shape {
crate::renderer::ClipShape::Plane {
normal, distance, ..
} => {
u.volume_type = 1;
u.plane_normal = *normal;
u.plane_dist = *distance;
}
crate::renderer::ClipShape::Box {
center,
half_extents,
orientation,
} => {
u.volume_type = 2;
u.box_center = *center;
u.box_half_extents = *half_extents;
u.box_col0 = orientation[0];
u.box_col1 = orientation[1];
u.box_col2 = orientation[2];
}
crate::renderer::ClipShape::Sphere { center, radius } => {
u.volume_type = 3;
u.sphere_center = *center;
u.sphere_radius = *radius;
}
_ => {}
}
u
}
}
#[allow(deprecated)]
unsafe impl bytemuck::Zeroable for ClipVolumeUniform {}
#[allow(deprecated)]
unsafe impl bytemuck::Pod for ClipVolumeUniform {}
pub struct MeshInstanceGpuData {
pub(crate) mesh_id: crate::resources::mesh::mesh_store::MeshId,
pub(crate) instance_count: u32,
pub(crate) bind_group: wgpu::BindGroup,
pub(crate) blend: crate::renderer::SpriteBlend,
pub(crate) _instance_buf: wgpu::Buffer,
}