viewport_lib_terrain/lib.rs
1//! Heightmap and splatmap terrain rendering for viewport-lib.
2//!
3//! The plugin registers as a viewport-lib
4//! [`ItemTypePlugin`](viewport_lib::plugin_api::ItemTypePlugin) and
5//! draws terrain inside the standard scene pass, picking up shadows,
6//! clipping, selection outline, picking, and frustum culling from the
7//! lib automatically.
8//!
9//! ```no_run
10//! # use viewport_lib_terrain::*;
11//! # use viewport_lib::ItemSettings;
12//! # let mut renderer: viewport_lib::renderer::ViewportRenderer = unimplemented!();
13//! # let device: &wgpu::Device = unimplemented!();
14//! renderer.with_item_type_plugin(device, Box::new(TerrainPlugin::new()));
15//!
16//! // Each frame:
17//! # let mut frame: viewport_lib::FrameData = Default::default();
18//! frame.scene.submit_plugin_items(
19//! TYPE_NAME,
20//! TerrainCollection { items: vec![] },
21//! );
22//! ```
23//!
24//! See `examples/eframe_terrain.rs` for a runnable demo.
25
26mod detail;
27mod item;
28mod mesh;
29mod pick;
30mod plugin;
31
32pub use detail::{
33 DetailKind, DetailLayer, DetailScatterOutput, DetailScatterParams, scatter_terrain_details,
34};
35pub use item::{
36 LAYER_COUNT, LayerTextures, SplatmapData, TerrainCollection, TerrainItem, TerrainLayer,
37};
38pub use plugin::TerrainPlugin;
39
40/// Stable name used as the
41/// [`SceneFrame::submit_plugin_items`](viewport_lib::renderer::SceneFrame::submit_plugin_items)
42/// key. Match this against
43/// [`TerrainPlugin::type_name`](viewport_lib::plugin_api::ItemTypePlugin::type_name)
44/// when wiring the host side.
45pub const TYPE_NAME: &str = "viewport-lib-terrain";