Compare commits
2 commits
7d312c19b7
...
cf1549a45b
Author | SHA1 | Date | |
---|---|---|---|
cf1549a45b | |||
|
fcf246b2cb |
5 changed files with 65 additions and 44 deletions
|
@ -22,6 +22,7 @@ pub trait RenderingFrontEnd {
|
|||
// scene rendering
|
||||
fn process(
|
||||
&mut self,
|
||||
changed: bool,
|
||||
content: Vec<&EntityObject>,
|
||||
buffer_recorder: &mut CommandBufferRecorder<'_>,
|
||||
images: &TargetMode<Vec<Arc<Image>>>,
|
||||
|
|
|
@ -406,6 +406,7 @@ impl RenderingFrontEnd for Rasterizer {
|
|||
|
||||
fn process(
|
||||
&mut self,
|
||||
_changed: bool,
|
||||
content: Vec<&EntityObject>,
|
||||
buffer_recorder: &mut CommandBufferRecorder<'_>,
|
||||
_images: &TargetMode<Vec<Arc<Image>>>,
|
||||
|
|
|
@ -680,6 +680,7 @@ impl RenderingFrontEnd for TraditionalRasterizer {
|
|||
|
||||
fn process(
|
||||
&mut self,
|
||||
_changed: bool,
|
||||
content: Vec<&EntityObject>,
|
||||
buffer_recorder: &mut CommandBufferRecorder<'_>,
|
||||
_images: &TargetMode<Vec<Arc<Image>>>,
|
||||
|
|
|
@ -65,6 +65,8 @@ where
|
|||
width: u32,
|
||||
height: u32,
|
||||
|
||||
vertex_count: u64,
|
||||
|
||||
renderer: T,
|
||||
}
|
||||
|
||||
|
@ -147,6 +149,8 @@ where
|
|||
|
||||
width,
|
||||
height,
|
||||
|
||||
vertex_count: 0,
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -601,6 +605,7 @@ where
|
|||
// scene rendering
|
||||
fn process(
|
||||
&mut self,
|
||||
changed: bool,
|
||||
content: Vec<&EntityObject>,
|
||||
buffer_recorder: &mut CommandBufferRecorder<'_>,
|
||||
images: &TargetMode<Vec<Arc<Image>>>,
|
||||
|
@ -614,65 +619,73 @@ where
|
|||
self.renderer.invalidate();
|
||||
self.animator.invalidate();
|
||||
|
||||
// gather textures and materials from all objects
|
||||
let (textures, materials, vertex_count) = Self::gather_descriptor_buffers(&content)?;
|
||||
if changed {
|
||||
let mut recompile = false;
|
||||
|
||||
let mut recompile = false;
|
||||
// gather textures and materials from all objects
|
||||
let (textures, materials, vertex_count) = Self::gather_descriptor_buffers(&content)?;
|
||||
self.vertex_count = vertex_count;
|
||||
|
||||
// update material descriptor
|
||||
if !materials.is_empty() {
|
||||
let materials_ref: Vec<&Arc<Buffer<Material>>> = materials.iter().collect();
|
||||
// update material descriptor
|
||||
if !materials.is_empty() {
|
||||
let materials_ref: Vec<&Arc<Buffer<Material>>> = materials.iter().collect();
|
||||
|
||||
if materials_ref.len() as u32 > self.max_material_count {
|
||||
while materials_ref.len() as u32 > self.max_material_count {
|
||||
self.max_material_count *= 2;
|
||||
if materials_ref.len() as u32 > self.max_material_count {
|
||||
while materials_ref.len() as u32 > self.max_material_count {
|
||||
self.max_material_count *= 2;
|
||||
}
|
||||
|
||||
self.material_desc_set = Self::create_material_descriptor_set(
|
||||
&self.device,
|
||||
self.max_material_count,
|
||||
)?;
|
||||
|
||||
recompile = true;
|
||||
}
|
||||
|
||||
self.material_desc_set =
|
||||
Self::create_material_descriptor_set(&self.device, self.max_material_count)?;
|
||||
|
||||
recompile = true;
|
||||
self.material_desc_set
|
||||
.update(&[DescriptorWrite::uniform_buffers(0, &materials_ref)])?;
|
||||
}
|
||||
|
||||
self.material_desc_set
|
||||
.update(&[DescriptorWrite::uniform_buffers(0, &materials_ref)])?;
|
||||
}
|
||||
// update texture descriptor
|
||||
if !textures.is_empty() {
|
||||
let textures_ref: Vec<&Arc<Image>> = textures.iter().collect();
|
||||
|
||||
// update texture descriptor
|
||||
if !textures.is_empty() {
|
||||
let textures_ref: Vec<&Arc<Image>> = textures.iter().collect();
|
||||
if textures_ref.len() as u32 > self.max_texture_count {
|
||||
while textures_ref.len() as u32 > self.max_texture_count {
|
||||
self.max_texture_count *= 2;
|
||||
}
|
||||
|
||||
if textures_ref.len() as u32 > self.max_texture_count {
|
||||
while textures_ref.len() as u32 > self.max_texture_count {
|
||||
self.max_texture_count *= 2;
|
||||
self.texture_desc_set =
|
||||
Self::create_texture_descriptor_set(&self.device, self.max_texture_count)?;
|
||||
|
||||
recompile = true;
|
||||
}
|
||||
|
||||
self.texture_desc_set =
|
||||
Self::create_texture_descriptor_set(&self.device, self.max_texture_count)?;
|
||||
|
||||
recompile = true;
|
||||
self.texture_desc_set
|
||||
.update(&[DescriptorWrite::combined_samplers(0, &textures_ref)])?;
|
||||
}
|
||||
|
||||
self.texture_desc_set
|
||||
.update(&[DescriptorWrite::combined_samplers(0, &textures_ref)])?;
|
||||
}
|
||||
|
||||
if recompile {
|
||||
self.renderer.recompile(&[
|
||||
&self.scene_desc_set,
|
||||
&self.material_desc_set,
|
||||
&self.texture_desc_set,
|
||||
&self.light_descriptor_set,
|
||||
&self.light_info_desc_set,
|
||||
])?;
|
||||
if recompile {
|
||||
self.renderer.recompile(&[
|
||||
&self.scene_desc_set,
|
||||
&self.material_desc_set,
|
||||
&self.texture_desc_set,
|
||||
&self.light_descriptor_set,
|
||||
&self.light_info_desc_set,
|
||||
])?;
|
||||
}
|
||||
}
|
||||
|
||||
let index = *indices.mono();
|
||||
|
||||
if let Some(scene_buffer) =
|
||||
self.animator
|
||||
.animate(&content, vertex_count, buffer_recorder, index, &self.view)?
|
||||
{
|
||||
if let Some(scene_buffer) = self.animator.animate(
|
||||
&content,
|
||||
self.vertex_count,
|
||||
buffer_recorder,
|
||||
index,
|
||||
&self.view,
|
||||
)? {
|
||||
self.scene_desc_set
|
||||
.update(&[DescriptorWrite::storage_buffers(0, &[scene_buffer])])?;
|
||||
}
|
||||
|
|
|
@ -463,8 +463,13 @@ impl TScene for Scene {
|
|||
#[cfg(feature = "timings")]
|
||||
let before = Instant::now();
|
||||
|
||||
self.renderer
|
||||
.process(content, buffer_recorder, images, indices)?;
|
||||
self.renderer.process(
|
||||
world.had_entity_changes(),
|
||||
content,
|
||||
buffer_recorder,
|
||||
images,
|
||||
indices,
|
||||
)?;
|
||||
|
||||
#[cfg(feature = "timings")]
|
||||
self.timings
|
||||
|
|
Loading…
Reference in a new issue