oxide_engine/asset/
mod.rs1use std::path::PathBuf;
4use std::sync::Arc;
5
6use oxide_asset::{
7 AssetServer as CoreAssetServer, AssetServerError as CoreAssetServerError, Assets as CoreAssets,
8 Handle as CoreHandle,
9};
10use oxide_ecs::Resource;
11use oxide_renderer::gltf::{load_gltf, GltfScene};
12use oxide_renderer::material::MaterialPipeline;
13use wgpu::{Device, Queue};
14
15pub use oxide_asset::*;
16
17#[derive(Resource, Default)]
19pub struct AssetServerResource {
20 pub server: CoreAssetServer,
21}
22
23#[derive(Resource, Default)]
25pub struct MaterialAssets {
26 pub assets: CoreAssets<MaterialPipeline>,
27}
28
29#[derive(Resource, Default)]
31pub struct GltfSceneAssets {
32 pub assets: CoreAssets<GltfScene>,
33}
34
35pub fn register_material_asset(
37 server: &mut CoreAssetServer,
38 assets: &mut CoreAssets<MaterialPipeline>,
39 material: MaterialPipeline,
40) -> CoreHandle<MaterialPipeline> {
41 let handle = server.allocate_handle::<MaterialPipeline>();
42 assets.insert(handle, material);
43 handle
44}
45
46pub fn load_gltf_async(
50 server: &mut CoreAssetServer,
51 device: Arc<Device>,
52 queue: Arc<Queue>,
53 path: impl Into<PathBuf>,
54) -> CoreHandle<GltfScene> {
55 let path = path.into();
56 server.load_async(move || {
57 load_gltf(&device, &queue, &path)
58 .map_err(|err| CoreAssetServerError::Message(err.to_string()))
59 })
60}