use wgpu::BindGroupLayout;
use crate::errors::AleaticoResult;
use crate::renderer::ctx::Gpu;
use crate::renderer::render_item::RenderItemStore;
use crate::renderer::resources::builtin::BuiltinPipelines;
use crate::renderer::resources::material::MaterialStore;
use crate::renderer::resources::mesh::MeshStore;
use crate::renderer::resources::pipelines::PipelineStore;
use crate::renderer::resources::texture::TextureStore;
pub mod material;
pub mod mesh;
pub mod pipelines;
pub mod texture;
pub(crate) mod builtin;
#[derive(Default)]
pub(crate) struct ResourceStore {
pub(crate) pipeline_store: PipelineStore,
pub(crate) mesh_store: MeshStore,
pub(crate) material_store: MaterialStore,
pub(crate) render_item_store: RenderItemStore,
pub(crate) texture_store: TextureStore,
pub(crate) builtin_pipelines: BuiltinPipelines
}
impl ResourceStore {
pub(crate) fn new(
gpu: &mut Gpu,
surface_format: wgpu::TextureFormat,
camera_layout: &BindGroupLayout
) -> AleaticoResult<Self> {
let mut pipeline_store = PipelineStore::new();
let builtin_pipelines = BuiltinPipelines::create(
gpu,
&mut pipeline_store,
surface_format,
camera_layout,
)?;
Ok(Self {
pipeline_store,
mesh_store: MeshStore::new(),
texture_store: TextureStore::new(),
material_store: MaterialStore::new(),
render_item_store: RenderItemStore::new(),
builtin_pipelines,
})
}
pub(crate) fn builtin_pipelines(&self) -> BuiltinPipelines {
self.builtin_pipelines
}
}