Skip to main content

pebble/graphics/
mod.rs

1use crate::{
2    assets::plugin::AssetPlugin,
3    ecs::{plugin::Plugin, system::SystemStage},
4    graphics::{
5        pipeline::{
6            compute::Compute,
7            cubemap::Cubemap,
8            instance::{ComputeInstance, MaterialInstance},
9            layout::GlobalLayoutPool,
10            material::Material,
11            mesh::Mesh,
12            mipmap::init_mipmap_generator,
13            samplers::init_global_samplers,
14            texture_array::TextureArray,
15            textures::Texture,
16        },
17        render::{Backend, BackendPlugin},
18        window::WindowPlugin,
19    },
20};
21
22pub mod pipeline;
23pub mod render;
24pub mod types;
25pub mod window;
26
27/// Windowing + GPU backend + every built-in asset type
28/// (`Mesh`/`Texture`/`TextureArray`/`Cubemap`/`Material`/`Compute`/
29/// `MaterialInstance`/`ComputeInstance`), all in one plugin. The usual
30/// starting point for an app that renders anything.
31pub struct GraphicsPlugin;
32impl Plugin for GraphicsPlugin {
33    fn build(self, app: crate::app::App) -> crate::app::App {
34        app.add_plugin(WindowPlugin::default())
35            .add_plugin(BackendPlugin)
36            .add_plugin(BuiltinAssetsPlugin)
37    }
38}
39
40/// Just the built-in asset types, without windowing — part of what
41/// [`GraphicsPlugin`] registers; add directly only if you're assembling
42/// your own windowing/backend setup around it.
43pub struct BuiltinAssetsPlugin;
44impl Plugin for BuiltinAssetsPlugin {
45    fn build(self, app: crate::app::App) -> crate::app::App {
46        app.insert_resource(GlobalLayoutPool::default())
47            .add_system(SystemStage::AssetSync, init_global_samplers)
48            .add_system(SystemStage::AssetSync, init_mipmap_generator)
49            .add_plugin(AssetPlugin::<Backend, Mesh>::new())
50            .add_plugin(AssetPlugin::<Backend, Texture>::new())
51            .add_plugin(AssetPlugin::<Backend, TextureArray>::new())
52            .add_plugin(AssetPlugin::<Backend, Cubemap>::new())
53            .add_plugin(AssetPlugin::<Backend, Material>::new())
54            .add_plugin(AssetPlugin::<Backend, Compute>::new())
55            .add_plugin(AssetPlugin::<Backend, MaterialInstance>::new())
56            .add_plugin(AssetPlugin::<Backend, ComputeInstance>::new())
57    }
58}
59
60#[cfg(test)]
61mod test {}