Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_solari/src/pathtracer/prepare.rs
6596 views
1
use super::Pathtracer;
2
use bevy_ecs::{
3
component::Component,
4
entity::Entity,
5
query::With,
6
system::{Commands, Query, Res, ResMut},
7
};
8
use bevy_image::ToExtents;
9
use bevy_render::{
10
camera::ExtractedCamera,
11
render_resource::{TextureDescriptor, TextureDimension, TextureFormat, TextureUsages},
12
renderer::RenderDevice,
13
texture::{CachedTexture, TextureCache},
14
};
15
16
#[derive(Component)]
17
pub struct PathtracerAccumulationTexture(pub CachedTexture);
18
19
pub fn prepare_pathtracer_accumulation_texture(
20
query: Query<(Entity, &ExtractedCamera), With<Pathtracer>>,
21
mut texture_cache: ResMut<TextureCache>,
22
render_device: Res<RenderDevice>,
23
mut commands: Commands,
24
) {
25
for (entity, camera) in &query {
26
let Some(viewport) = camera.physical_viewport_size else {
27
continue;
28
};
29
30
let descriptor = TextureDescriptor {
31
label: Some("pathtracer_accumulation_texture"),
32
size: viewport.to_extents(),
33
mip_level_count: 1,
34
sample_count: 1,
35
dimension: TextureDimension::D2,
36
format: TextureFormat::Rgba32Float,
37
usage: TextureUsages::STORAGE_BINDING,
38
view_formats: &[],
39
};
40
41
commands
42
.entity(entity)
43
.insert(PathtracerAccumulationTexture(
44
texture_cache.get(&render_device, descriptor),
45
));
46
}
47
}
48
49