Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_solari/src/scene/extract.rs
9374 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, PreviousGlobalTransform, 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
Option<&PreviousGlobalTransform>,
21
)>,
22
>,
23
mut commands: Commands,
24
) {
25
for (render_entity, mesh, material, transform, previous_frame_transform) in &instances {
26
let mut commands = commands.entity(render_entity);
27
28
match previous_frame_transform.cloned() {
29
Some(previous_frame_transform) => commands.insert((
30
mesh.clone(),
31
material.clone(),
32
*transform,
33
previous_frame_transform,
34
)),
35
None => commands.insert((mesh.clone(), material.clone(), *transform)),
36
};
37
}
38
}
39
40
#[derive(Resource, Deref, Default)]
41
pub struct StandardMaterialAssets(HashMap<AssetId<StandardMaterial>, StandardMaterial>);
42
43
impl ExtractResource for StandardMaterialAssets {
44
type Source = Assets<StandardMaterial>;
45
46
fn extract_resource(source: &Self::Source) -> Self {
47
Self(
48
source
49
.iter()
50
.map(|(asset_id, material)| (asset_id, material.clone()))
51
.collect(),
52
)
53
}
54
}
55
56