use ecs::pair::{ChildOf, Pair}; use ecs::phase::{Phase, POST_UPDATE as POST_UPDATE_PHASE}; use ecs::{declare_entity, Component}; use crate::builder; pub mod opengl; declare_entity!( pub RENDER_PHASE, ( Phase, Pair::builder() .relation::() .target_id(*POST_UPDATE_PHASE) .build() ) ); builder! { /// Window graphics properties. #[builder(name=GraphicsPropertiesBuilder, derives=(Debug, Clone))] #[derive(Debug, Clone, Component)] #[non_exhaustive] pub struct GraphicsProperties { /// Number of samples for multisampling. `None` means no multisampling. #[builder(skip_generate_fn)] pub multisampling_sample_cnt: Option, /// Whether graphics API debugging is enabled. pub debug: bool, /// Whether depth testing is enabled pub depth_test: bool, } } impl GraphicsProperties { pub fn builder() -> GraphicsPropertiesBuilder { GraphicsPropertiesBuilder::default() } } impl Default for GraphicsProperties { fn default() -> Self { Self::builder().build() } } impl GraphicsPropertiesBuilder { pub fn multisampling_sample_cnt(mut self, multisampling_sample_cnt: u8) -> Self { self.multisampling_sample_cnt = Some(multisampling_sample_cnt); self } pub fn no_multisampling(mut self) -> Self { self.multisampling_sample_cnt = None; self } } impl Default for GraphicsPropertiesBuilder { fn default() -> Self { Self { multisampling_sample_cnt: Some(8), debug: false, depth_test: true, } } }