Skip to main content

re_viewer_context/view/
mod.rs

1//! Rerun View class definition
2//!
3//! Defines a framework & utilities for defining classes of views in the Rerun viewer.
4//! Does not implement any concrete view.
5
6// TODO(andreas): Can we move some of these to the `re_view` crate?
7mod diagnostic;
8mod highlights;
9mod named_system;
10mod spawn_heuristics;
11mod system_execution_output;
12mod view_class;
13mod view_class_placeholder;
14mod view_class_registry;
15mod view_context;
16mod view_context_system;
17mod view_query;
18mod view_states;
19mod visualizability_constraints;
20pub(crate) mod visualizer_entity_subscriber;
21mod visualizer_system;
22
23use std::sync::Arc;
24
25pub use diagnostic::{ViewerDiagnostic, ViewerReportSeverity};
26pub use highlights::{
27    OptionalViewEntityHighlight, ViewEntityHighlight, ViewHighlights, ViewOutlineMasks,
28};
29pub use named_system::{IdentifiedViewSystem, PerSystemEntities, ViewSystemIdentifier};
30pub use spawn_heuristics::{MAX_VIEWS_SPAWNED, RecommendedView, ViewSpawnHeuristics};
31pub use system_execution_output::{
32    SystemExecutionOutput, VisualizerTypeReport, VisualizerViewReport,
33};
34pub use view_class::{
35    RecommendedVisualizers, ViewClass, ViewClassExt, ViewClassLayoutPriority, ViewClassUiOutput,
36    ViewState, ViewStateExt, VisualizersSectionOutput, VisualizersSectionUi,
37};
38pub use view_class_placeholder::ViewClassPlaceholder;
39pub use view_class_registry::{ViewClassRegistry, ViewClassRegistryError, ViewSystemRegistrator};
40pub use view_context::ViewContext;
41pub use view_context_system::{
42    ViewContextCollection, ViewContextSystem, ViewContextSystemOncePerFrameResult, ViewSystemState,
43};
44pub use view_query::{
45    DataResult, RecommendedMappings, ViewQuery, VisualizerComponentMappings,
46    VisualizerComponentSource, VisualizerInstruction, VisualizerInstructionsPerType,
47};
48pub use view_states::{PreviewState, ViewStates};
49pub use visualizability_constraints::{
50    BufferAndFormatConstraint, SingleRequiredComponentConstraint, VisualizabilityConstraints,
51};
52pub use visualizer_system::{
53    VisualizerCollection, VisualizerExecutionOutput, VisualizerInstructionReport,
54    VisualizerQueryInfo, VisualizerReportContext, VisualizerSystem,
55};
56
57// ---------------------------------------------------------------------------
58
59/// A "catastrophic" view system execution error, making it impossible to produce any results at all.
60///
61/// Whenever possible, prefer [`VisualizerExecutionOutput::reports_per_instruction`] to report failures with
62/// individual entities rather than stopping visualization entirely.
63#[derive(Clone, Debug, thiserror::Error)]
64pub enum ViewSystemExecutionError {
65    #[error("View context system {0} not found")]
66    ContextSystemNotFound(&'static str),
67
68    #[error("View part system {0} not found")]
69    VisualizerSystemNotFound(&'static str),
70
71    #[error(transparent)]
72    QueryError(Arc<re_query::QueryError>),
73
74    #[error(transparent)]
75    DeserializationError(Arc<re_sdk_types::DeserializationError>),
76
77    #[error("Failed to create draw data: {0}")]
78    DrawDataCreationError(Arc<dyn std::error::Error + Send + Sync>),
79
80    #[error("Error accessing map view tiles.")]
81    MapTilesError,
82
83    #[error(transparent)]
84    GpuTransferError(#[from] re_renderer::CpuWriteGpuReadError),
85
86    #[error("Failed to downcast view's to the {0}.")]
87    StateCastError(&'static str),
88
89    #[error(transparent)]
90    ComponentFallbackError(#[from] crate::ComponentFallbackError),
91
92    #[error(transparent)]
93    ViewBuilderError(#[from] re_renderer::view_builder::ViewBuilderError),
94
95    #[error(transparent)]
96    RendererRegistrationError(#[from] re_renderer::RendererRegistrationError),
97}
98
99const _: () = assert!(
100    std::mem::size_of::<ViewSystemExecutionError>() <= 64,
101    "Error type is too large. Try to reduce its size by boxing some of its variants.",
102);
103
104// Convenience conversions for some re_renderer error types since these are so frequent.
105
106impl From<re_renderer::renderer::LineDrawDataError> for ViewSystemExecutionError {
107    fn from(val: re_renderer::renderer::LineDrawDataError) -> Self {
108        Self::DrawDataCreationError(Arc::new(val))
109    }
110}
111
112impl From<re_renderer::renderer::PointCloudDrawDataError> for ViewSystemExecutionError {
113    fn from(val: re_renderer::renderer::PointCloudDrawDataError) -> Self {
114        Self::DrawDataCreationError(Arc::new(val))
115    }
116}
117
118impl From<re_renderer::renderer::GaussianSplatDrawDataError> for ViewSystemExecutionError {
119    fn from(val: re_renderer::renderer::GaussianSplatDrawDataError) -> Self {
120        Self::DrawDataCreationError(Arc::new(val))
121    }
122}
123
124impl From<re_sdk_types::DeserializationError> for ViewSystemExecutionError {
125    fn from(val: re_sdk_types::DeserializationError) -> Self {
126        Self::DeserializationError(Arc::new(val))
127    }
128}