From f6bc9a022d534c4f54b54385787098e4be21f636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois?= Date: Wed, 30 Mar 2022 19:38:24 +0000 Subject: [PATCH] Sprites - keep color as 4 f32 (#4361) # Objective - Fix #4356 ## Solution - Do not reduce the color of sprites to 4 u8 --- crates/bevy_sprite/src/render/mod.rs | 9 +++------ crates/bevy_sprite/src/render/sprite.wgsl | 4 ++-- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/crates/bevy_sprite/src/render/mod.rs b/crates/bevy_sprite/src/render/mod.rs index 5ce2a809bfa90..7e8cbe98577b2 100644 --- a/crates/bevy_sprite/src/render/mod.rs +++ b/crates/bevy_sprite/src/render/mod.rs @@ -122,7 +122,7 @@ impl SpecializedRenderPipeline for SpritePipeline { if key.contains(SpritePipelineKey::COLORED) { // color - formats.push(VertexFormat::Uint32); + formats.push(VertexFormat::Float32x4); } let vertex_layout = @@ -283,7 +283,7 @@ struct SpriteVertex { struct ColoredSpriteVertex { pub position: [f32; 3], pub uv: [f32; 2], - pub color: u32, + pub color: [f32; 4], } pub struct SpriteMeta { @@ -498,14 +498,11 @@ pub fn queue_sprites( // Store the vertex data and add the item to the render phase if current_batch.colored { - // encode color as a single u32 to save space - let color = extracted_sprite.color.as_linear_rgba_u32(); - for i in QUAD_INDICES.iter() { sprite_meta.colored_vertices.push(ColoredSpriteVertex { position: positions[*i], uv: uvs[*i].into(), - color, + color: extracted_sprite.color.as_linear_rgba_f32(), }); } let item_start = colored_index; diff --git a/crates/bevy_sprite/src/render/sprite.wgsl b/crates/bevy_sprite/src/render/sprite.wgsl index 128536c691787..99015d2f9eff1 100644 --- a/crates/bevy_sprite/src/render/sprite.wgsl +++ b/crates/bevy_sprite/src/render/sprite.wgsl @@ -18,14 +18,14 @@ fn vertex( [[location(0)]] vertex_position: vec3, [[location(1)]] vertex_uv: vec2, #ifdef COLORED - [[location(2)]] vertex_color: u32, + [[location(2)]] vertex_color: vec4, #endif ) -> VertexOutput { var out: VertexOutput; out.uv = vertex_uv; out.position = view.view_proj * vec4(vertex_position, 1.0); #ifdef COLORED - out.color = vec4((vec4(vertex_color) >> vec4(0u, 8u, 16u, 24u)) & vec4(255u)) / 255.0; + out.color = vertex_color; #endif return out; }