#ifdef TONEMAP_IN_SHADER #import bevy_core_pipeline::tonemapping #endif struct View { view_proj: mat4x4, inverse_view_proj: mat4x4, view: mat4x4, inverse_view: mat4x4, projection: mat4x4, inverse_projection: mat4x4, world_position: vec3, // viewport(x_origin, y_origin, width, height) viewport: vec4, }; @group(0) @binding(0) var view: View; struct VertexOutput { @location(0) uv: vec2, #ifdef COLORED @location(1) color: vec4, #endif @builtin(position) position: vec4, }; @vertex fn vertex( @location(0) vertex_position: vec3, @location(1) vertex_uv: vec2, #ifdef COLORED @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 = vertex_color; #endif return out; } @group(1) @binding(0) var sprite_texture: texture_2d; @group(1) @binding(1) var sprite_sampler: sampler; @fragment fn fragment(in: VertexOutput) -> @location(0) vec4 { var color = textureSample(sprite_texture, sprite_sampler, in.uv); #ifdef COLORED color = in.color * color; #endif #ifdef TONEMAP_IN_SHADER color = vec4(reinhard_luminance(color.rgb), color.a); #endif return color; }