Skip to content

Commit

Permalink
Added Globals struct to prepass shader (#8070)
Browse files Browse the repository at this point in the history
  • Loading branch information
Anti-Alias authored Mar 13, 2023
1 parent dcc0edf commit 884b9b6
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 10 deletions.
39 changes: 29 additions & 10 deletions crates/bevy_pbr/src/prepass/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use bevy_ecs::{
use bevy_reflect::TypeUuid;
use bevy_render::{
camera::ExtractedCamera,
globals::{GlobalsBuffer, GlobalsUniform},
mesh::MeshVertexBufferLayout,
prelude::{Camera, Mesh},
render_asset::RenderAssets,
Expand Down Expand Up @@ -167,14 +168,25 @@ impl<M: Material> FromWorld for PrepassPipeline<M> {
// View
BindGroupLayoutEntry {
binding: 0,
visibility: ShaderStages::VERTEX | ShaderStages::FRAGMENT,
visibility: ShaderStages::VERTEX_FRAGMENT,
ty: BindingType::Buffer {
ty: BufferBindingType::Uniform,
has_dynamic_offset: true,
min_binding_size: Some(ViewUniform::min_size()),
},
count: None,
},
// Globals
BindGroupLayoutEntry {
binding: 1,
visibility: ShaderStages::VERTEX_FRAGMENT,
ty: BindingType::Buffer {
ty: BufferBindingType::Uniform,
has_dynamic_offset: false,
min_binding_size: Some(GlobalsUniform::min_size()),
},
count: None,
},
],
label: Some("prepass_view_layout"),
});
Expand Down Expand Up @@ -573,19 +585,26 @@ pub fn queue_prepass_view_bind_group<M: Material>(
render_device: Res<RenderDevice>,
prepass_pipeline: Res<PrepassPipeline<M>>,
view_uniforms: Res<ViewUniforms>,
globals_buffer: Res<GlobalsBuffer>,
mut prepass_view_bind_group: ResMut<PrepassViewBindGroup>,
) {
if let Some(view_binding) = view_uniforms.uniforms.binding() {
prepass_view_bind_group.bind_group =
Some(render_device.create_bind_group(&BindGroupDescriptor {
entries: &[BindGroupEntry {
let Some(view_binding) = view_uniforms.uniforms.binding() else { return };
let Some(globals_binding) = globals_buffer.buffer.binding() else { return };
prepass_view_bind_group.bind_group =
Some(render_device.create_bind_group(&BindGroupDescriptor {
entries: &[
BindGroupEntry {
binding: 0,
resource: view_binding,
}],
label: Some("prepass_view_bind_group"),
layout: &prepass_pipeline.view_layout,
}));
}
},
BindGroupEntry {
binding: 1,
resource: globals_binding,
},
],
label: Some("prepass_view_bind_group"),
layout: &prepass_pipeline.view_layout,
}));
}

#[allow(clippy::too_many_arguments)]
Expand Down
4 changes: 4 additions & 0 deletions crates/bevy_pbr/src/prepass/prepass_bindings.wgsl
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
@group(0) @binding(0)
var<uniform> view: View;

@group(0) @binding(1)
var<uniform> globals: Globals;

// Material bindings will be in @group(1)

@group(2) @binding(0)
Expand All @@ -16,3 +19,4 @@ var<uniform> mesh: Mesh;
var<uniform> joint_matrices: SkinnedMesh;
#import bevy_pbr::skinning
#endif

0 comments on commit 884b9b6

Please sign in to comment.