feo_oop_engine/graphics/
mod.rs

1//! Everything used to render
2//! 
3//! TODO
4//! 
5pub mod frame_system;
6pub mod three_vertex_buffers_definition;
7pub mod graphics_system;
8pub mod pass_builder;
9pub mod draw_pass_manager;
10pub mod lighting_pass_manager;
11
12use {
13    crate::{
14        components::{
15            Normal, 
16            TextureIndex, 
17            Vertex
18        }, 
19        registration::relation::ParentWrapper, 
20        components::triangle_mesh::TriangleMesh, 
21    },
22    self::{
23        draw_pass_manager::DrawPassManager, 
24        lighting_pass_manager::LightingPassManager
25    },
26    std::sync::Arc,
27    vulkano::buffer::CpuAccessibleBuffer
28};
29
30pub trait Drawable {
31    /// Adds self's visible characteristics and its children to the draw pass.
32    fn add_to_draw_pass_manager(&self, draw_pass_manager: &mut DrawPassManager);
33
34    // fn push_set_and_buffers( // TODO: run draw command instead
35    //     &self,
36    //     vertex_buffers: &mut Vec<Arc<CpuAccessibleBuffer<[Vertex]>>>, 
37    //     normal_buffers: &mut Vec<Arc<CpuAccessibleBuffer<[Normal]>>>, 
38    //     texture_index_buffers: &mut Vec<Arc<CpuAccessibleBuffer<[TextureIndex]>>>, 
39        
40    //     world_sets: &mut Vec<Arc<dyn DescriptorSet + Send + Sync>>,
41    //     world_buffer: CpuBufferPool<vs_draw::ty::World>,
42
43    //     material_sets: &mut Vec<Arc<dyn DescriptorSet + Send + Sync>>, 
44    //     material_buffer: CpuBufferPool<fs_draw::ty::Material>,
45        
46    //     pipeline: Arc<dyn GraphicsPipelineAbstract + Send + Sync>
47    // );
48
49    /// Adds self's relevant characteristics and its children to the pass managers.
50    fn load_into_managers(
51        &self,
52        this: ParentWrapper,
53        draw_pass_manager: &mut DrawPassManager,
54        lighting_pass_manager: &mut LightingPassManager,
55    );
56    
57    /// Checks if an object is visible
58    fn get_visible(&self) -> bool;
59    
60    /// Adds a triangle mesh to the Drawable struct
61    fn add_triangle_mesh(&mut self, triangle_mesh: Arc<TriangleMesh>) -> Result<(), ()>;
62    
63    fn get_triangle_mesh(&self) -> Vec<Arc<TriangleMesh>>;
64    fn get_vertex_buffer(&self) -> Vec<Option<Arc<CpuAccessibleBuffer<[Vertex]>>>>;
65    fn get_normals_buffer(&self) -> Vec<Option<Arc<CpuAccessibleBuffer<[Normal]>>>>;
66    fn get_texture_indices_buffer(&self) -> Vec<Option<Arc<CpuAccessibleBuffer<[TextureIndex]>>>>;
67}