Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
glalonde committed Apr 3, 2020
1 parent d26609e commit 0bef9d9
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 7 deletions.
6 changes: 5 additions & 1 deletion shaders/particle_system/terrain.frag
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ layout(location = 0) out vec4 out_color;
layout(set = 0, binding = 0) buffer TerrainBufferButtom {
int[] terrain_buffer_bottom;
};
layout(set = 0, binding = 1) uniform Params {

layout(set = 0, binding = 1) buffer TerrainBufferTop {
int[] terrain_buffer_top;
};
layout(set = 0, binding = 2) uniform Params {
uint width;
uint height;
};
Expand Down
57 changes: 51 additions & 6 deletions src/terrain_renderer.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
// Keep track of the rendering members and logic to turn the integer particle
// density texture into a colormapped texture ready to be visualized.
pub struct TerrainRenderer {
pub render_bind_group: wgpu::BindGroup,
pub render_bind_group_a: wgpu::BindGroup,
pub render_bind_group_b: wgpu::BindGroup,
pub render_pipeline: wgpu::RenderPipeline,
}

Expand Down Expand Up @@ -39,7 +40,7 @@ impl TerrainRenderer {
let render_bind_group_layout =
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
bindings: &[
// Terrain buffer
// Bottom terrain buffer
wgpu::BindGroupLayoutBinding {
binding: 0,
visibility: wgpu::ShaderStage::FRAGMENT,
Expand All @@ -48,16 +49,25 @@ impl TerrainRenderer {
readonly: true,
},
},
// Uniform inputs
// Top terrain buffer
wgpu::BindGroupLayoutBinding {
binding: 1,
visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::StorageBuffer {
dynamic: false,
readonly: true,
},
},
// Uniform inputs
wgpu::BindGroupLayoutBinding {
binding: 2,
visibility: wgpu::ShaderStage::FRAGMENT,
ty: wgpu::BindingType::UniformBuffer { dynamic: false },
},
],
});
// TODO bind in second terrain texture when the fragment supports it.
let render_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
let render_bind_group_a = device.create_bind_group(&wgpu::BindGroupDescriptor {
layout: &render_bind_group_layout,
bindings: &[
wgpu::Binding {
Expand All @@ -69,6 +79,40 @@ impl TerrainRenderer {
},
wgpu::Binding {
binding: 1,
resource: wgpu::BindingResource::Buffer {
buffer: &compute_locals.terrain_buffer_b,
range: 0..compute_locals.terrain_buffer_b_size,
},
},
wgpu::Binding {
binding: 2,
resource: wgpu::BindingResource::Buffer {
buffer: &uniform_buf,
range: 0..fragment_uniform_size,
},
},
],
});

let render_bind_group_b = device.create_bind_group(&wgpu::BindGroupDescriptor {
layout: &render_bind_group_layout,
bindings: &[
wgpu::Binding {
binding: 0,
resource: wgpu::BindingResource::Buffer {
buffer: &compute_locals.terrain_buffer_b,
range: 0..compute_locals.terrain_buffer_b_size,
},
},
wgpu::Binding {
binding: 1,
resource: wgpu::BindingResource::Buffer {
buffer: &compute_locals.terrain_buffer_a,
range: 0..compute_locals.terrain_buffer_a_size,
},
},
wgpu::Binding {
binding: 2,
resource: wgpu::BindingResource::Buffer {
buffer: &uniform_buf,
range: 0..fragment_uniform_size,
Expand Down Expand Up @@ -113,7 +157,8 @@ impl TerrainRenderer {
alpha_to_coverage_enabled: false,
});
TerrainRenderer {
render_bind_group,
render_bind_group_a,
render_bind_group_b,
render_pipeline,
}
}
Expand All @@ -135,7 +180,7 @@ impl TerrainRenderer {
depth_stencil_attachment: None,
});
rpass.set_pipeline(&self.render_pipeline);
rpass.set_bind_group(0, &self.render_bind_group, &[]);
rpass.set_bind_group(0, &self.render_bind_group_a, &[]);
rpass.draw(0..4 as u32, 0..1);
}
}

0 comments on commit 0bef9d9

Please sign in to comment.