From 7c8b9c9219cbe82879a7425c9d5c96b244bef8e6 Mon Sep 17 00:00:00 2001 From: Robert Swain Date: Sun, 8 Oct 2023 22:17:01 +0200 Subject: [PATCH] Fix 2d_shapes and general 2D mesh instancing (#10051) # Objective - Fix #10050 ## Solution - Push constants needed to be defined in the pipeline layout and `bevy_sprite` needed to have a `webgl` feature. --- crates/bevy_internal/Cargo.toml | 2 +- crates/bevy_sprite/Cargo.toml | 3 +++ crates/bevy_sprite/src/mesh2d/mesh.rs | 9 ++++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/crates/bevy_internal/Cargo.toml b/crates/bevy_internal/Cargo.toml index 41b06c2311ae9f..c92a3618ebbdc4 100644 --- a/crates/bevy_internal/Cargo.toml +++ b/crates/bevy_internal/Cargo.toml @@ -73,7 +73,7 @@ x11 = ["bevy_winit/x11"] subpixel_glyph_atlas = ["bevy_text/subpixel_glyph_atlas"] # Optimise for WebGL2 -webgl = ["bevy_core_pipeline?/webgl", "bevy_pbr?/webgl", "bevy_render?/webgl", "bevy_gizmos?/webgl"] +webgl = ["bevy_core_pipeline?/webgl", "bevy_pbr?/webgl", "bevy_render?/webgl", "bevy_gizmos?/webgl", "bevy_sprite?/webgl"] # enable systems that allow for automated testing on CI bevy_ci_testing = ["bevy_app/bevy_ci_testing", "bevy_time/bevy_ci_testing", "bevy_render?/bevy_ci_testing", "bevy_render?/ci_limits"] diff --git a/crates/bevy_sprite/Cargo.toml b/crates/bevy_sprite/Cargo.toml index 649dc423450365..4cf948236dad9e 100644 --- a/crates/bevy_sprite/Cargo.toml +++ b/crates/bevy_sprite/Cargo.toml @@ -8,6 +8,9 @@ repository = "https://github.com/bevyengine/bevy" license = "MIT OR Apache-2.0" keywords = ["bevy"] +[features] +webgl = [] + [dependencies] # bevy bevy_app = { path = "../bevy_app", version = "0.12.0-dev" } diff --git a/crates/bevy_sprite/src/mesh2d/mesh.rs b/crates/bevy_sprite/src/mesh2d/mesh.rs index fb9fde65fe050e..5f62000bc441ee 100644 --- a/crates/bevy_sprite/src/mesh2d/mesh.rs +++ b/crates/bevy_sprite/src/mesh2d/mesh.rs @@ -536,6 +536,13 @@ impl SpecializedMeshPipeline for Mesh2dPipeline { true => ViewTarget::TEXTURE_FORMAT_HDR, false => TextureFormat::bevy_default(), }; + let mut push_constant_ranges = Vec::with_capacity(1); + if cfg!(all(feature = "webgl", target_arch = "wasm32")) { + push_constant_ranges.push(PushConstantRange { + stages: ShaderStages::VERTEX, + range: 0..4, + }); + } Ok(RenderPipelineDescriptor { vertex: VertexState { @@ -555,7 +562,7 @@ impl SpecializedMeshPipeline for Mesh2dPipeline { })], }), layout: vec![self.view_layout.clone(), self.mesh_layout.clone()], - push_constant_ranges: Vec::new(), + push_constant_ranges, primitive: PrimitiveState { front_face: FrontFace::Ccw, cull_mode: None,