Path: blob/main/crates/bevy_sprite_render/src/render/sprite.wgsl
6604 views
#ifdef TONEMAP_IN_SHADER #import bevy_core_pipeline::tonemapping #endif #import bevy_render::{ maths::affine3_to_square, view::View, } #import bevy_sprite::sprite_view_bindings::view struct VertexInput { @builtin(vertex_index) index: u32, // NOTE: Instance-rate vertex buffer members prefixed with i_ // NOTE: i_model_transpose_colN are the 3 columns of a 3x4 matrix that is the transpose of the // affine 4x3 model matrix. @location(0) i_model_transpose_col0: vec4<f32>, @location(1) i_model_transpose_col1: vec4<f32>, @location(2) i_model_transpose_col2: vec4<f32>, @location(3) i_color: vec4<f32>, @location(4) i_uv_offset_scale: vec4<f32>, } struct VertexOutput { @builtin(position) clip_position: vec4<f32>, @location(0) uv: vec2<f32>, @location(1) @interpolate(flat) color: vec4<f32>, }; @vertex fn vertex(in: VertexInput) -> VertexOutput { var out: VertexOutput; let vertex_position = vec3<f32>( f32(in.index & 0x1u), f32((in.index & 0x2u) >> 1u), 0.0 ); out.clip_position = view.clip_from_world * affine3_to_square(mat3x4<f32>( in.i_model_transpose_col0, in.i_model_transpose_col1, in.i_model_transpose_col2, )) * vec4<f32>(vertex_position, 1.0); out.uv = vec2<f32>(vertex_position.xy) * in.i_uv_offset_scale.zw + in.i_uv_offset_scale.xy; out.color = in.i_color; return out; } @group(1) @binding(0) var sprite_texture: texture_2d<f32>; @group(1) @binding(1) var sprite_sampler: sampler; @fragment fn fragment(in: VertexOutput) -> @location(0) vec4<f32> { var color = in.color * textureSample(sprite_texture, sprite_sampler, in.uv); #ifdef TONEMAP_IN_SHADER color = tonemapping::tone_mapping(color, view.color_grading); #endif return color; }