summaryrefslogtreecommitdiff
path: root/src/renderer.rs
diff options
context:
space:
mode:
authorMicha White <botahamec@outlook.com>2022-10-06 20:31:29 -0400
committerMicha White <botahamec@outlook.com>2022-10-06 20:31:29 -0400
commit19811a235d8b6791e4a70a89c0cd21a928de6e95 (patch)
tree0ad92783702320457314cef51a44ed03c731d13b /src/renderer.rs
parent73ed4d94cf3dae47f89fe2575ae27f304407ed86 (diff)
Moved camera logic
Diffstat (limited to 'src/renderer.rs')
-rw-r--r--src/renderer.rs49
1 files changed, 3 insertions, 46 deletions
diff --git a/src/renderer.rs b/src/renderer.rs
index 2c26836..215dda8 100644
--- a/src/renderer.rs
+++ b/src/renderer.rs
@@ -1,7 +1,6 @@
use std::{convert::TryInto, mem::size_of, num::NonZeroU32};
use crate::{
- camera::CameraUniform,
instance::InstanceId,
texture::{TextureError, TextureId},
vertex::SQUARE,
@@ -57,8 +56,6 @@ pub struct Renderer {
instance_buffer_size: usize,
instances: Vec<Instance>,
camera: Camera,
- camera_buffer: wgpu::Buffer,
- camera_bind_group: wgpu::BindGroup,
textures: WgpuTextures,
window: Window,
}
@@ -194,37 +191,7 @@ impl Renderer {
// create the camera
let width = window.inner_size().width;
let height = window.inner_size().height;
- let camera = Camera::from_size(width, height);
- let camera_buffer = device.create_buffer(&wgpu::BufferDescriptor {
- label: Some("Camera Uniform"),
- size: size_of::<CameraUniform>() as wgpu::BufferAddress,
- usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
- mapped_at_creation: false,
- });
-
- let camera_bind_group_layout =
- device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
- label: Some("Camera Bind Group Layout"),
- entries: &[wgpu::BindGroupLayoutEntry {
- binding: 0,
- visibility: wgpu::ShaderStages::VERTEX,
- ty: wgpu::BindingType::Buffer {
- ty: wgpu::BufferBindingType::Uniform,
- has_dynamic_offset: false,
- min_binding_size: None,
- },
- count: None,
- }],
- });
-
- let camera_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
- label: Some("Camera Bind Group"),
- layout: &camera_bind_group_layout,
- entries: &[wgpu::BindGroupEntry {
- binding: 0,
- resource: camera_buffer.as_entire_binding(),
- }],
- });
+ let (camera, camera_bind_group_layout) = Camera::new(&device, width, height);
// the vertex buffer used for rendering squares
let square_vertices = SQUARE
@@ -273,8 +240,6 @@ impl Renderer {
instance_buffer_size,
instances,
camera,
- camera_buffer,
- camera_bind_group,
textures,
window,
})
@@ -396,14 +361,6 @@ impl Renderer {
);
}
- fn refresh_camera_buffer(&mut self) {
- self.queue.write_buffer(
- &self.camera_buffer,
- 0 as wgpu::BufferAddress,
- bytemuck::cast_slice(&self.camera.to_matrix()),
- );
- }
-
/// Renders a new frame to the window
///
/// # Errors
@@ -433,7 +390,7 @@ impl Renderer {
.try_into()
.expect("expected less than 3 billion instances");
- self.refresh_camera_buffer();
+ self.camera.refresh(&self.queue);
self.textures.fill_textures(&self.queue);
{
@@ -451,7 +408,7 @@ impl Renderer {
});
render_pass.set_pipeline(&self.render_pipeline);
- render_pass.set_bind_group(0, &self.camera_bind_group, &[]);
+ render_pass.set_bind_group(0, self.camera.bind_group(), &[]);
render_pass.set_bind_group(1, self.textures.bind_group(), &[]);
render_pass.set_vertex_buffer(0, self.square_vertex_buffer.slice(..));
render_pass.set_vertex_buffer(1, self.instance_buffer.slice(..));