Skip to main content

viewport_lib/
lib.rs

1#![warn(missing_docs)]
2//! `viewport-lib` — a 3D viewport library for `wgpu` applications.
3//!
4//! Built on `wgpu` and `glam`, with no required UI toolkit. The crate provides
5//! the renderer, camera, picking, and interaction pieces; host applications keep
6//! control of their own windowing and event loop.
7//!
8//! # Quick start
9//!
10//! 1. Create a [`ViewportRenderer`] from a `wgpu::Device` and target format.
11//! 2. Upload meshes or volumes through [`ViewportGpuResources`].
12//! 3. Build a [`FrameData`] each frame.
13//! 4. Call [`ViewportRenderer::prepare`] and then [`ViewportRenderer::paint_to`].
14
15/// Error types for the viewport library.
16pub mod error;
17
18/// Arcball camera, frustum, view presets, and animator.
19pub mod camera;
20/// BVH picking, marching cubes, isolines, and cap geometry.
21pub mod geometry;
22/// Gizmo, snap, selection, annotation, picking, and input.
23pub mod interaction;
24/// Main viewport renderer wrapping all GPU resources.
25pub mod renderer;
26/// GPU resource container (pipelines, buffers, bind groups).
27pub mod resources;
28/// Scene graph, material, traits, and AABB.
29pub mod scene;
30/// Axes orientation indicator.
31pub mod widgets;
32
33// ---------------------------------------------------------------------------
34// Module re-exports — preserve old `viewport_lib::foo::Bar` paths.
35// ---------------------------------------------------------------------------
36
37pub use geometry::bvh;
38pub use interaction::annotation;
39pub use interaction::gizmo;
40pub use interaction::input;
41pub use interaction::picking;
42pub use interaction::selection;
43pub use interaction::snap;
44pub use scene::aabb;
45pub use scene::material;
46pub use scene::traits;
47pub use widgets::axes_indicator;
48
49// ---------------------------------------------------------------------------
50// Flat re-exports — these form the public crate API.
51// ---------------------------------------------------------------------------
52
53pub use error::{ViewportError, ViewportResult};
54
55pub use camera::animator::{CameraAnimator, CameraDamping, Easing};
56pub use camera::camera::{Camera, Projection};
57pub use camera::frustum::{CullStats, Frustum};
58pub use camera::view_preset::ViewPreset;
59
60pub use scene::aabb::Aabb;
61pub use scene::material::Material;
62pub use scene::scene::{Group, GroupId, Layer, LayerId, Scene, SceneNode};
63pub use scene::traits::{RenderMode, ViewportObject};
64
65pub use geometry::bvh::PickAccelerator;
66pub use geometry::isoline::{IsolineItem, extract_isolines};
67pub use geometry::marching_cubes::{VolumeData, extract_isosurface};
68
69pub use interaction::annotation::AnnotationLabel;
70#[cfg(feature = "egui")]
71pub use interaction::annotation::draw_annotation_labels;
72pub use interaction::annotation::{world_to_screen, world_to_screen_from_frame};
73pub use interaction::gizmo::{
74    Gizmo, GizmoAxis, GizmoMode, GizmoSpace, PivotMode, gizmo_center_for_pivot,
75};
76pub use interaction::input::{
77    Action, ActionState, Binding, FrameInput, InputMode, InputSystem, KeyCode, Modifiers,
78    MouseButton,
79};
80pub use interaction::picking::{
81    GpuPickHit, PickHit, ProbeBinding, RectPickResult, pick_rect,
82    pick_scene_accelerated_with_probe, pick_scene_nodes_with_probe, pick_scene_with_probe,
83};
84pub use interaction::selection::{NodeId, Selection};
85pub use interaction::snap::{ConstraintOverlay, SnapConfig};
86
87pub use widgets::axes_indicator::AxisView;
88
89pub use renderer::shader_hashes::ShaderValidation;
90pub use renderer::stats::FrameStats;
91pub use renderer::{
92    ClipPlane, ClipVolume, ComputeFilterItem, ComputeFilterKind, FilterMode, FrameData, GlyphItem,
93    GlyphType, LightKind, LightSource, LightingSettings, OverlayQuad, PointCloudItem,
94    PointRenderMode, PolylineItem, PostProcessSettings, SceneRenderItem, ShadowFilter,
95    StreamtubeItem, ToneMapping, ViewportRenderer, VolumeItem,
96};
97pub use renderer::{ScalarBar, ScalarBarAnchor, ScalarBarOrientation};
98
99pub use resources::colormap_data::{
100    export_paraview_xml_colormap, lerp_colormap_lut, parse_paraview_xml_colormap,
101};
102pub use resources::mesh_store::MeshId;
103pub use resources::{
104    AttributeData, AttributeKind, AttributeRef, BuiltinColormap, CameraUniform, ClipVolumeUniform,
105    ColormapId, ComputeFilterResult, LightUniform, LightsUniform, MeshData, SingleLightUniform,
106    ViewportGpuResources, VolumeId, lerp_attributes,
107};