diff --git a/crates/bevy_ui/src/render/ui_material.wgsl b/crates/bevy_ui/src/render/ui_material.wgsl index db9628559d..14f6b3e816 100644 --- a/crates/bevy_ui/src/render/ui_material.wgsl +++ b/crates/bevy_ui/src/render/ui_material.wgsl @@ -1,8 +1,13 @@ -#import bevy_render::view::View +#import bevy_render::{ + view::View, + globals::Globals, +} #import bevy_ui::ui_vertex_output::UiVertexOutput @group(0) @binding(0) var view: View; +@group(0) @binding(1) +var globals: Globals; @vertex fn vertex( diff --git a/crates/bevy_ui/src/render/ui_material_pipeline.rs b/crates/bevy_ui/src/render/ui_material_pipeline.rs index a535877485..7892efa454 100644 --- a/crates/bevy_ui/src/render/ui_material_pipeline.rs +++ b/crates/bevy_ui/src/render/ui_material_pipeline.rs @@ -15,6 +15,7 @@ use bevy_ecs::{ use bevy_math::{Mat4, Rect, Vec2, Vec4Swizzles}; use bevy_render::{ extract_component::ExtractComponentPlugin, + globals::{GlobalsBuffer, GlobalsUniform}, render_asset::RenderAssets, render_phase::*, render_resource::{binding_types::uniform_buffer, *}, @@ -225,11 +226,15 @@ impl FromWorld for UiMaterialPipeline { let view_layout = render_device.create_bind_group_layout( "ui_view_layout", - &BindGroupLayoutEntries::single( + &BindGroupLayoutEntries::sequential( ShaderStages::VERTEX_FRAGMENT, - uniform_buffer::(true), + ( + uniform_buffer::(true), + uniform_buffer::(false), + ), ), ); + UiMaterialPipeline { ui_layout, view_layout, @@ -430,18 +435,22 @@ pub fn prepare_uimaterial_nodes( mut ui_meta: ResMut>, mut extracted_uinodes: ResMut>, view_uniforms: Res, + globals_buffer: Res, ui_material_pipeline: Res>, mut phases: Query<&mut RenderPhase>, mut previous_len: Local, ) { - if let Some(view_binding) = view_uniforms.uniforms.binding() { + if let (Some(view_binding), Some(globals_binding)) = ( + view_uniforms.uniforms.binding(), + globals_buffer.buffer.binding(), + ) { let mut batches: Vec<(Entity, UiMaterialBatch)> = Vec::with_capacity(*previous_len); ui_meta.vertices.clear(); ui_meta.view_bind_group = Some(render_device.create_bind_group( "ui_material_view_bind_group", &ui_material_pipeline.view_layout, - &BindGroupEntries::single(view_binding), + &BindGroupEntries::sequential((view_binding, globals_binding)), )); let mut index = 0; diff --git a/crates/bevy_ui/src/ui_material.rs b/crates/bevy_ui/src/ui_material.rs index 680d4aa410..7f5cd0923a 100644 --- a/crates/bevy_ui/src/ui_material.rs +++ b/crates/bevy_ui/src/ui_material.rs @@ -67,7 +67,8 @@ use bevy_render::render_resource::{AsBindGroup, RenderPipelineDescriptor, Shader /// /// If you only use the fragment shader make sure to import `UiVertexOutput` from /// `bevy_ui::ui_vertex_output` in your wgsl shader. -/// Also note that bind group 0 is always bound to the [`View Uniform`](bevy_render::view::ViewUniform). +/// Also note that bind group 0 is always bound to the [`View Uniform`](bevy_render::view::ViewUniform) +/// and the [`Globals Uniform`](bevy_render::globals::GlobalsUniform). /// /// ```wgsl /// #import bevy_ui::ui_vertex_output UiVertexOutput