update ResourceProvider::update to actually use read-only world
This commit is contained in:
parent
b9f4c0a53b
commit
77a6619bf4
@ -10,8 +10,7 @@ pub trait ResourceProvider {
|
|||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: make this read-only
|
fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &World, _resources: &Resources) {
|
||||||
fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &mut World, _resources: &Resources) {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: remove this
|
// TODO: remove this
|
||||||
|
|||||||
@ -27,8 +27,28 @@ impl Camera2dResourceProvider {
|
|||||||
window_resized_event_reader,
|
window_resized_event_reader,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn update_read_only(
|
impl ResourceProvider for Camera2dResourceProvider {
|
||||||
|
fn initialize(
|
||||||
|
&mut self,
|
||||||
|
render_context: &mut dyn RenderContext,
|
||||||
|
_world: &mut World,
|
||||||
|
resources: &Resources,
|
||||||
|
) {
|
||||||
|
let buffer = render_context.resources_mut().create_buffer(BufferInfo {
|
||||||
|
size: std::mem::size_of::<[[f32; 4]; 4]>(),
|
||||||
|
buffer_usage: BufferUsage::COPY_DST | BufferUsage::UNIFORM,
|
||||||
|
..Default::default()
|
||||||
|
});
|
||||||
|
|
||||||
|
let mut render_resource_assignments =
|
||||||
|
resources.get_mut::<RenderResourceAssignments>().unwrap();
|
||||||
|
render_resource_assignments.set(resource_name::uniform::CAMERA2D, buffer);
|
||||||
|
self.camera_buffer = Some(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(
|
||||||
&mut self,
|
&mut self,
|
||||||
render_context: &mut dyn RenderContext,
|
render_context: &mut dyn RenderContext,
|
||||||
world: &World,
|
world: &World,
|
||||||
@ -43,8 +63,7 @@ impl Camera2dResourceProvider {
|
|||||||
|
|
||||||
if let Some(_) = primary_window_resized_event {
|
if let Some(_) = primary_window_resized_event {
|
||||||
let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>();
|
let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>();
|
||||||
for (camera, _) in <(Read<Camera>, Read<ActiveCamera2d>)>::query().iter(world)
|
for (camera, _) in <(Read<Camera>, Read<ActiveCamera2d>)>::query().iter(world) {
|
||||||
{
|
|
||||||
let camera_matrix: [[f32; 4]; 4] = camera.view_matrix.to_cols_array_2d();
|
let camera_matrix: [[f32; 4]; 4] = camera.view_matrix.to_cols_array_2d();
|
||||||
|
|
||||||
if let Some(old_tmp_buffer) = self.tmp_buffer {
|
if let Some(old_tmp_buffer) = self.tmp_buffer {
|
||||||
@ -73,32 +92,3 @@ impl Camera2dResourceProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ResourceProvider for Camera2dResourceProvider {
|
|
||||||
fn initialize(
|
|
||||||
&mut self,
|
|
||||||
render_context: &mut dyn RenderContext,
|
|
||||||
_world: &mut World,
|
|
||||||
resources: &Resources,
|
|
||||||
) {
|
|
||||||
let buffer = render_context.resources_mut().create_buffer(BufferInfo {
|
|
||||||
size: std::mem::size_of::<[[f32; 4]; 4]>(),
|
|
||||||
buffer_usage: BufferUsage::COPY_DST | BufferUsage::UNIFORM,
|
|
||||||
..Default::default()
|
|
||||||
});
|
|
||||||
|
|
||||||
let mut render_resource_assignments =
|
|
||||||
resources.get_mut::<RenderResourceAssignments>().unwrap();
|
|
||||||
render_resource_assignments.set(resource_name::uniform::CAMERA2D, buffer);
|
|
||||||
self.camera_buffer = Some(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn update(
|
|
||||||
&mut self,
|
|
||||||
render_context: &mut dyn RenderContext,
|
|
||||||
world: &mut World,
|
|
||||||
resources: &Resources,
|
|
||||||
) {
|
|
||||||
self.update_read_only(render_context, world, resources);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -28,8 +28,33 @@ impl CameraResourceProvider {
|
|||||||
window_resized_event_reader,
|
window_resized_event_reader,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn update_read_only(&mut self, world: &World, resources: &Resources, render_context: &mut dyn RenderContext) {
|
impl ResourceProvider for CameraResourceProvider {
|
||||||
|
fn initialize(
|
||||||
|
&mut self,
|
||||||
|
render_context: &mut dyn RenderContext,
|
||||||
|
_world: &mut World,
|
||||||
|
resources: &Resources,
|
||||||
|
) {
|
||||||
|
let buffer = render_context.resources_mut().create_buffer(BufferInfo {
|
||||||
|
size: std::mem::size_of::<[[f32; 4]; 4]>(),
|
||||||
|
buffer_usage: BufferUsage::COPY_DST | BufferUsage::UNIFORM,
|
||||||
|
..Default::default()
|
||||||
|
});
|
||||||
|
|
||||||
|
let mut render_resource_assignments =
|
||||||
|
resources.get_mut::<RenderResourceAssignments>().unwrap();
|
||||||
|
render_resource_assignments.set(resource_name::uniform::CAMERA, buffer);
|
||||||
|
self.camera_buffer = Some(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(
|
||||||
|
&mut self,
|
||||||
|
render_context: &mut dyn RenderContext,
|
||||||
|
world: &World,
|
||||||
|
resources: &Resources,
|
||||||
|
) {
|
||||||
let window_resized_events = resources.get::<Events<WindowResized>>().unwrap();
|
let window_resized_events = resources.get::<Events<WindowResized>>().unwrap();
|
||||||
let primary_window_resized_event = window_resized_events
|
let primary_window_resized_event = window_resized_events
|
||||||
.iter(&mut self.window_resized_event_reader)
|
.iter(&mut self.window_resized_event_reader)
|
||||||
@ -70,32 +95,3 @@ impl CameraResourceProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ResourceProvider for CameraResourceProvider {
|
|
||||||
fn initialize(
|
|
||||||
&mut self,
|
|
||||||
render_context: &mut dyn RenderContext,
|
|
||||||
_world: &mut World,
|
|
||||||
resources: &Resources,
|
|
||||||
) {
|
|
||||||
let buffer = render_context.resources_mut().create_buffer(BufferInfo {
|
|
||||||
size: std::mem::size_of::<[[f32; 4]; 4]>(),
|
|
||||||
buffer_usage: BufferUsage::COPY_DST | BufferUsage::UNIFORM,
|
|
||||||
..Default::default()
|
|
||||||
});
|
|
||||||
|
|
||||||
let mut render_resource_assignments =
|
|
||||||
resources.get_mut::<RenderResourceAssignments>().unwrap();
|
|
||||||
render_resource_assignments.set(resource_name::uniform::CAMERA, buffer);
|
|
||||||
self.camera_buffer = Some(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn update(
|
|
||||||
&mut self,
|
|
||||||
render_context: &mut dyn RenderContext,
|
|
||||||
world: &mut World,
|
|
||||||
resources: &Resources,
|
|
||||||
) {
|
|
||||||
self.update_read_only(world, resources, render_context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -21,8 +21,10 @@ impl FrameTextureResourceProvider {
|
|||||||
height: 0,
|
height: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn update(&mut self, render_context: &mut dyn RenderContext, resources: &Resources) {
|
impl ResourceProvider for FrameTextureResourceProvider {
|
||||||
|
fn update(&mut self, render_context: &mut dyn RenderContext, _world: &World, resources: &Resources) {
|
||||||
let windows = resources.get::<Windows>().unwrap();
|
let windows = resources.get::<Windows>().unwrap();
|
||||||
let window = windows.get_primary().unwrap();
|
let window = windows.get_primary().unwrap();
|
||||||
|
|
||||||
@ -44,9 +46,3 @@ impl FrameTextureResourceProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ResourceProvider for FrameTextureResourceProvider {
|
|
||||||
fn update(&mut self, render_context: &mut dyn RenderContext, _world: &mut World, resources: &Resources) {
|
|
||||||
self.update(render_context, resources)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -3,7 +3,8 @@ use crate::{
|
|||||||
resource_name, BufferInfo, BufferUsage, RenderResource, RenderResourceAssignments,
|
resource_name, BufferInfo, BufferUsage, RenderResource, RenderResourceAssignments,
|
||||||
ResourceProvider,
|
ResourceProvider,
|
||||||
},
|
},
|
||||||
Light, LightRaw, renderer_2::RenderContext,
|
renderer_2::RenderContext,
|
||||||
|
Light, LightRaw,
|
||||||
};
|
};
|
||||||
use bevy_transform::prelude::{LocalToWorld, Translation};
|
use bevy_transform::prelude::{LocalToWorld, Translation};
|
||||||
use legion::prelude::*;
|
use legion::prelude::*;
|
||||||
@ -33,7 +34,35 @@ impl LightResourceProvider {
|
|||||||
tmp_count_buffer: None,
|
tmp_count_buffer: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn update_read_only(&mut self, render_context: &mut dyn RenderContext, world: &World) {
|
}
|
||||||
|
|
||||||
|
impl ResourceProvider for LightResourceProvider {
|
||||||
|
fn initialize(
|
||||||
|
&mut self,
|
||||||
|
render_context: &mut dyn RenderContext,
|
||||||
|
_world: &mut World,
|
||||||
|
resources: &Resources,
|
||||||
|
) {
|
||||||
|
let light_uniform_size =
|
||||||
|
std::mem::size_of::<LightCount>() + self.max_lights * std::mem::size_of::<LightRaw>();
|
||||||
|
|
||||||
|
let buffer = render_context.resources_mut().create_buffer(BufferInfo {
|
||||||
|
size: light_uniform_size,
|
||||||
|
buffer_usage: BufferUsage::UNIFORM | BufferUsage::COPY_SRC | BufferUsage::COPY_DST,
|
||||||
|
..Default::default()
|
||||||
|
});
|
||||||
|
let mut render_resource_assignments =
|
||||||
|
resources.get_mut::<RenderResourceAssignments>().unwrap();
|
||||||
|
render_resource_assignments.set(resource_name::uniform::LIGHTS, buffer);
|
||||||
|
self.light_buffer = Some(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update(
|
||||||
|
&mut self,
|
||||||
|
render_context: &mut dyn RenderContext,
|
||||||
|
world: &World,
|
||||||
|
_resources: &Resources,
|
||||||
|
) {
|
||||||
if self.lights_are_dirty {
|
if self.lights_are_dirty {
|
||||||
let light_query = <(Read<Light>, Read<LocalToWorld>, Read<Translation>)>::query();
|
let light_query = <(Read<Light>, Read<LocalToWorld>, Read<Translation>)>::query();
|
||||||
let light_count = light_query.iter(world).count();
|
let light_count = light_query.iter(world).count();
|
||||||
@ -101,29 +130,3 @@ impl LightResourceProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ResourceProvider for LightResourceProvider {
|
|
||||||
fn initialize(
|
|
||||||
&mut self,
|
|
||||||
render_context: &mut dyn RenderContext,
|
|
||||||
_world: &mut World,
|
|
||||||
resources: &Resources,
|
|
||||||
) {
|
|
||||||
let light_uniform_size =
|
|
||||||
std::mem::size_of::<LightCount>() + self.max_lights * std::mem::size_of::<LightRaw>();
|
|
||||||
|
|
||||||
let buffer = render_context.resources_mut().create_buffer(BufferInfo {
|
|
||||||
size: light_uniform_size,
|
|
||||||
buffer_usage: BufferUsage::UNIFORM | BufferUsage::COPY_SRC | BufferUsage::COPY_DST,
|
|
||||||
..Default::default()
|
|
||||||
});
|
|
||||||
let mut render_resource_assignments =
|
|
||||||
resources.get_mut::<RenderResourceAssignments>().unwrap();
|
|
||||||
render_resource_assignments.set(resource_name::uniform::LIGHTS, buffer);
|
|
||||||
self.light_buffer = Some(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn update(&mut self, render_context: &mut dyn RenderContext, world: &mut World, _resources: &Resources) {
|
|
||||||
self.update_read_only(render_context, world);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -91,7 +91,7 @@ impl ResourceProvider for MeshResourceProvider {
|
|||||||
vertex_buffer_descriptors.set(Vertex::get_vertex_buffer_descriptor().cloned().unwrap());
|
vertex_buffer_descriptors.set(Vertex::get_vertex_buffer_descriptor().cloned().unwrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &mut World, _resources: &Resources) {
|
fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &World, _resources: &Resources) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finish_update(
|
fn finish_update(
|
||||||
|
|||||||
@ -128,18 +128,6 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_readonly(
|
|
||||||
&mut self,
|
|
||||||
_render_context: &mut dyn RenderContext,
|
|
||||||
world: &World,
|
|
||||||
resources: &Resources,
|
|
||||||
) {
|
|
||||||
self.reset_buffer_array_status_counts();
|
|
||||||
self.update_uniforms_info(world);
|
|
||||||
self.update_uniform_handles_info(world, resources);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fn reset_buffer_array_status_counts(&mut self) {
|
fn reset_buffer_array_status_counts(&mut self) {
|
||||||
for buffer_status in self.uniform_buffer_status.iter_mut() {
|
for buffer_status in self.uniform_buffer_status.iter_mut() {
|
||||||
if let Some((_name, buffer_status)) = buffer_status {
|
if let Some((_name, buffer_status)) = buffer_status {
|
||||||
@ -734,10 +722,12 @@ where
|
|||||||
fn update(
|
fn update(
|
||||||
&mut self,
|
&mut self,
|
||||||
_render_context: &mut dyn RenderContext,
|
_render_context: &mut dyn RenderContext,
|
||||||
world: &mut World,
|
world: &World,
|
||||||
resources: &Resources,
|
resources: &Resources,
|
||||||
) {
|
) {
|
||||||
self.update_readonly(_render_context, world, resources);
|
self.reset_buffer_array_status_counts();
|
||||||
|
self.update_uniforms_info(world);
|
||||||
|
self.update_uniform_handles_info(world, resources);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finish_update(
|
fn finish_update(
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user