Path: blob/main/crates/bevy_solari/src/scene/extract.rs
9374 views
use super::RaytracingMesh3d;1use bevy_asset::{AssetId, Assets};2use bevy_derive::Deref;3use bevy_ecs::{4resource::Resource,5system::{Commands, Query},6};7use bevy_pbr::{MeshMaterial3d, PreviousGlobalTransform, StandardMaterial};8use bevy_platform::collections::HashMap;9use bevy_render::{extract_resource::ExtractResource, sync_world::RenderEntity, Extract};10use bevy_transform::components::GlobalTransform;1112pub fn extract_raytracing_scene(13instances: Extract<14Query<(15RenderEntity,16&RaytracingMesh3d,17&MeshMaterial3d<StandardMaterial>,18&GlobalTransform,19Option<&PreviousGlobalTransform>,20)>,21>,22mut commands: Commands,23) {24for (render_entity, mesh, material, transform, previous_frame_transform) in &instances {25let mut commands = commands.entity(render_entity);2627match previous_frame_transform.cloned() {28Some(previous_frame_transform) => commands.insert((29mesh.clone(),30material.clone(),31*transform,32previous_frame_transform,33)),34None => commands.insert((mesh.clone(), material.clone(), *transform)),35};36}37}3839#[derive(Resource, Deref, Default)]40pub struct StandardMaterialAssets(HashMap<AssetId<StandardMaterial>, StandardMaterial>);4142impl ExtractResource for StandardMaterialAssets {43type Source = Assets<StandardMaterial>;4445fn extract_resource(source: &Self::Source) -> Self {46Self(47source48.iter()49.map(|(asset_id, material)| (asset_id, material.clone()))50.collect(),51)52}53}545556