Skip to content

Commit 072217d

Browse files
committed
removed duplicated resources
1 parent 6453fed commit 072217d

File tree

4 files changed

+54
-36
lines changed

4 files changed

+54
-36
lines changed

src/pipeline.rs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,19 @@ impl From<&Camera> for Uniforms {
3434
}
3535
}
3636

37-
impl Pipeline {
37+
pub struct MainPipeline {
38+
pub projection_buffer: wgpu::Buffer,
39+
pub view_buffer: wgpu::Buffer,
40+
pub pipeline: wgpu::RenderPipeline,
41+
pub bind_group_0: wgpu::BindGroup,
42+
pub bind_group_0_layout: wgpu::BindGroupLayout,
43+
pub bind_group_1: wgpu::BindGroup,
44+
pub bind_group_1_layout: wgpu::BindGroupLayout,
45+
pub depth_texture: Texture,
46+
pub pipeline_type: PipelineType,
47+
}
48+
49+
impl MainPipeline {
3850
pub fn new(state: &State) -> Self {
3951
let swapchain_capabilities = state.surface.get_capabilities(&state.adapter);
4052
let swapchain_format = swapchain_capabilities.formats[0];
@@ -241,6 +253,8 @@ impl Pipeline {
241253
});
242254

243255
Self {
256+
bind_group_0_layout,
257+
bind_group_1_layout,
244258
view_buffer,
245259
projection_buffer,
246260
pipeline_type: PipelineType::WORLD,
@@ -252,7 +266,7 @@ impl Pipeline {
252266
}
253267
}
254268

255-
impl PipelineTrait for Pipeline {
269+
impl PipelineTrait for MainPipeline {
256270
fn projection_buffer(&self) -> &Buffer {
257271
&self.projection_buffer
258272
}
@@ -300,13 +314,3 @@ pub enum PipelineType {
300314
WATER,
301315
UI,
302316
}
303-
304-
pub struct Pipeline {
305-
pub projection_buffer: wgpu::Buffer,
306-
pub view_buffer: wgpu::Buffer,
307-
pub pipeline: wgpu::RenderPipeline,
308-
pub bind_group_0: wgpu::BindGroup,
309-
pub bind_group_1: wgpu::BindGroup,
310-
pub depth_texture: Texture,
311-
pub pipeline_type: PipelineType,
312-
}

src/state.rs

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::blocks::block_type::BlockType;
77
use crate::collision::CollisionBox;
88
use crate::perf;
99
use crate::persistence::Saveable;
10-
use crate::pipeline::{Pipeline, PipelineTrait};
10+
use crate::pipeline::{MainPipeline, PipelineTrait};
1111
use crate::utils::{ChunkFromPosition, RelativeFromAbsolute};
1212
use crate::water::WaterPipeline;
1313
use crate::{
@@ -105,6 +105,7 @@ impl State {
105105
surface_config,
106106
instance,
107107
window: window.clone(),
108+
main_pipeline: None,
108109
device,
109110
world,
110111
queue,
@@ -113,11 +114,10 @@ impl State {
113114
camera_controller: CameraController::default(),
114115
};
115116

116-
let world_pipeline = Box::new(Pipeline::new(&state));
117+
state.main_pipeline = Some(MainPipeline::new(&state));
117118
let water_pipeline = Box::new(WaterPipeline::new(&state));
118119
let ui_pipeline = Box::new(UIPipeline::new(&state));
119120

120-
state.pipelines.push(world_pipeline);
121121
state.pipelines.push(water_pipeline);
122122
state.pipelines.push(ui_pipeline);
123123

@@ -243,7 +243,10 @@ impl State {
243243
self.surface_config.height = new_size.height.max(1);
244244
self.surface.configure(&self.device, &self.surface_config);
245245
let new_depth = Texture::create_depth_texture(&self);
246-
self.pipelines[0].set_depth_texture(new_depth);
246+
self.main_pipeline
247+
.as_mut()
248+
.unwrap()
249+
.set_depth_texture(new_depth);
247250
}
248251
}
249252
pub fn update(&mut self, delta_time: f32, total_time: f32) {
@@ -268,13 +271,11 @@ impl State {
268271

269272
let uniforms = Uniforms::from(&player.camera);
270273

271-
for pipeline in self.pipelines.iter() {
272-
self.queue.write_buffer(
273-
pipeline.view_buffer(),
274-
0,
275-
bytemuck::cast_slice(&[uniforms.view]),
276-
)
277-
}
274+
self.queue.write_buffer(
275+
self.main_pipeline.as_ref().unwrap().view_buffer(),
276+
0,
277+
bytemuck::cast_slice(&[uniforms.view]),
278+
);
278279
// Drop write lock
279280
std::mem::drop(player);
280281

@@ -328,7 +329,7 @@ impl State {
328329
},
329330
})],
330331
depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment {
331-
view: &self.pipelines[0].depth_texture().view,
332+
view: &self.main_pipeline.as_ref().unwrap().depth_texture().view,
332333
depth_ops: Some(wgpu::Operations {
333334
load: wgpu::LoadOp::Clear(1.0),
334335
store: wgpu::StoreOp::Store,
@@ -338,7 +339,7 @@ impl State {
338339
timestamp_writes: None,
339340
occlusion_query_set: None,
340341
});
341-
let pipeline = &self.pipelines[0];
342+
let pipeline = &self.main_pipeline.as_ref().unwrap();
342343

343344
main_rpass.set_pipeline(pipeline.pipeline());
344345

@@ -382,7 +383,7 @@ impl State {
382383
},
383384
})],
384385
depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment {
385-
view: &self.pipelines[0].depth_texture().view,
386+
view: &self.main_pipeline.as_ref().unwrap().depth_texture.view,
386387
depth_ops: Some(wgpu::Operations {
387388
load: wgpu::LoadOp::Load,
388389
store: wgpu::StoreOp::Discard,
@@ -392,12 +393,12 @@ impl State {
392393
timestamp_writes: None,
393394
occlusion_query_set: None,
394395
});
395-
let pipeline = &self.pipelines[1];
396+
let pipeline = &self.pipelines[0];
396397

397398
water_rpass.set_pipeline(pipeline.pipeline());
398399

399-
water_rpass.set_bind_group(0, pipeline.bind_group_0(), &[]);
400-
water_rpass.set_bind_group(1, pipeline.bind_group_1(), &[]);
400+
water_rpass.set_bind_group(0, self.main_pipeline.as_ref().unwrap().bind_group_0(), &[]);
401+
water_rpass.set_bind_group(1, self.main_pipeline.as_ref().unwrap().bind_group_1(), &[]);
401402
water_rpass.set_bind_group(3, &player.camera.position_bind_group, &[]);
402403

403404
for chunk in chunks.iter() {
@@ -435,7 +436,7 @@ impl State {
435436
},
436437
})],
437438
depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment {
438-
view: &self.pipelines[0].depth_texture().view,
439+
view: &self.main_pipeline.as_ref().unwrap().depth_texture.view,
439440
depth_ops: Some(wgpu::Operations {
440441
load: wgpu::LoadOp::Clear(1.0),
441442
store: wgpu::StoreOp::Store,
@@ -446,11 +447,19 @@ impl State {
446447
occlusion_query_set: None,
447448
});
448449

449-
let pipeline = &self.pipelines[2];
450+
let pipeline = &self.pipelines[1];
450451
ui_renderpass.set_pipeline(pipeline.pipeline());
451452

452-
ui_renderpass.set_bind_group(0, pipeline.bind_group_0(), &[]);
453-
ui_renderpass.set_bind_group(1, pipeline.bind_group_1(), &[]);
453+
ui_renderpass.set_bind_group(
454+
0,
455+
self.main_pipeline.as_ref().unwrap().bind_group_0(),
456+
&[],
457+
);
458+
ui_renderpass.set_bind_group(
459+
1,
460+
self.main_pipeline.as_ref().unwrap().bind_group_1(),
461+
&[],
462+
);
454463

455464
ui_renderpass.set_vertex_buffer(0, self.ui.vertex_buffer.slice(..));
456465
ui_renderpass
@@ -475,6 +484,7 @@ pub struct State {
475484
pub queue: Arc<wgpu::Queue>,
476485
pub window: Arc<Mutex<Window>>,
477486
pub surface_config: wgpu::SurfaceConfiguration,
487+
pub main_pipeline: Option<MainPipeline>,
478488
pub pipelines: Vec<Box<dyn PipelineTrait>>,
479489
pub player: Arc<RwLock<Player>>,
480490
pub world: World,

src/ui.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,13 +233,17 @@ impl UIPipeline {
233233
],
234234
});
235235

236+
let main_pipeline = state.main_pipeline.as_ref().expect("Should be initialized");
236237
// Pipeline layouts
237238
let pipeline_layout =
238239
state
239240
.device
240241
.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
241242
label: None,
242-
bind_group_layouts: &[&bind_group_0_layout, &bind_group_1_layout],
243+
bind_group_layouts: &[
244+
&main_pipeline.bind_group_0_layout,
245+
&main_pipeline.bind_group_1_layout,
246+
],
243247
push_constant_ranges: &[],
244248
});
245249

src/water.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,8 @@ impl WaterPipeline {
183183
.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
184184
label: None,
185185
bind_group_layouts: &[
186-
&bind_group_0_layout,
187-
&bind_group_1_layout,
186+
&state.main_pipeline.as_ref().unwrap().bind_group_0_layout,
187+
&state.main_pipeline.as_ref().unwrap().bind_group_1_layout,
188188
&state.world.chunk_data_layout,
189189
&state
190190
.player

0 commit comments

Comments
 (0)