Sprites - keep color as 4 f32 (#4361)

# Objective

- Fix #4356

## Solution

- Do not reduce the color of sprites to 4 u8
This commit is contained in:
François 2022-03-30 19:38:24 +00:00
parent 509548190b
commit f6bc9a022d
2 changed files with 5 additions and 8 deletions

View File

@ -122,7 +122,7 @@ impl SpecializedRenderPipeline for SpritePipeline {
if key.contains(SpritePipelineKey::COLORED) { if key.contains(SpritePipelineKey::COLORED) {
// color // color
formats.push(VertexFormat::Uint32); formats.push(VertexFormat::Float32x4);
} }
let vertex_layout = let vertex_layout =
@ -283,7 +283,7 @@ struct SpriteVertex {
struct ColoredSpriteVertex { struct ColoredSpriteVertex {
pub position: [f32; 3], pub position: [f32; 3],
pub uv: [f32; 2], pub uv: [f32; 2],
pub color: u32, pub color: [f32; 4],
} }
pub struct SpriteMeta { pub struct SpriteMeta {
@ -498,14 +498,11 @@ pub fn queue_sprites(
// Store the vertex data and add the item to the render phase // Store the vertex data and add the item to the render phase
if current_batch.colored { 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() { for i in QUAD_INDICES.iter() {
sprite_meta.colored_vertices.push(ColoredSpriteVertex { sprite_meta.colored_vertices.push(ColoredSpriteVertex {
position: positions[*i], position: positions[*i],
uv: uvs[*i].into(), uv: uvs[*i].into(),
color, color: extracted_sprite.color.as_linear_rgba_f32(),
}); });
} }
let item_start = colored_index; let item_start = colored_index;

View File

@ -18,14 +18,14 @@ fn vertex(
[[location(0)]] vertex_position: vec3<f32>, [[location(0)]] vertex_position: vec3<f32>,
[[location(1)]] vertex_uv: vec2<f32>, [[location(1)]] vertex_uv: vec2<f32>,
#ifdef COLORED #ifdef COLORED
[[location(2)]] vertex_color: u32, [[location(2)]] vertex_color: vec4<f32>,
#endif #endif
) -> VertexOutput { ) -> VertexOutput {
var out: VertexOutput; var out: VertexOutput;
out.uv = vertex_uv; out.uv = vertex_uv;
out.position = view.view_proj * vec4<f32>(vertex_position, 1.0); out.position = view.view_proj * vec4<f32>(vertex_position, 1.0);
#ifdef COLORED #ifdef COLORED
out.color = vec4<f32>((vec4<u32>(vertex_color) >> vec4<u32>(0u, 8u, 16u, 24u)) & vec4<u32>(255u)) / 255.0; out.color = vertex_color;
#endif #endif
return out; return out;
} }