Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_solari/src/scene/extract.rs
6596 views
1
use super::RaytracingMesh3d;
2
use bevy_asset::{AssetId, Assets};
3
use bevy_derive::Deref;
4
use bevy_ecs::{
5
resource::Resource,
6
system::{Commands, Query},
7
};
8
use bevy_pbr::{MeshMaterial3d, StandardMaterial};
9
use bevy_platform::collections::HashMap;
10
use bevy_render::{extract_resource::ExtractResource, sync_world::RenderEntity, Extract};
11
use bevy_transform::components::GlobalTransform;
12
13
pub fn extract_raytracing_scene(
14
instances: Extract<
15
Query<(
16
RenderEntity,
17
&RaytracingMesh3d,
18
&MeshMaterial3d<StandardMaterial>,
19
&GlobalTransform,
20
)>,
21
>,
22
mut commands: Commands,
23
) {
24
for (render_entity, mesh, material, transform) in &instances {
25
commands
26
.entity(render_entity)
27
.insert((mesh.clone(), material.clone(), *transform));
28
}
29
}
30
31
#[derive(Resource, Deref, Default)]
32
pub struct StandardMaterialAssets(HashMap<AssetId<StandardMaterial>, StandardMaterial>);
33
34
impl ExtractResource for StandardMaterialAssets {
35
type Source = Assets<StandardMaterial>;
36
37
fn extract_resource(source: &Self::Source) -> Self {
38
Self(
39
source
40
.iter()
41
.map(|(asset_id, material)| (asset_id, material.clone()))
42
.collect(),
43
)
44
}
45
}
46
47