1import package::mesh2d::{ 2 vertex_output::VertexOutput, 6import bevy_render::bindless::{bindless_samplers_filtering, bindless_textures_2d}; 9import bevy_core_pipeline::tonemapping; 11import bevy_render::color_operations::linear_to_srgb; 13import bevy_render::color_operations::linear_rgb_to_oklab; 17 uv_transform: mat3x3<f32>, 25struct ColorMaterialBindings { 31@group(constants::MATERIAL_BIND_GROUP) @binding(0) var<storage> color_material_indices: 32 array<ColorMaterialBindings>; 33@group(constants::MATERIAL_BIND_GROUP) @binding(10) var<storage> color_materials: array<ColorMaterial>; 36@group(constants::MATERIAL_BIND_GROUP) @binding(0) var<uniform> material: ColorMaterial; 37@group(constants::MATERIAL_BIND_GROUP) @binding(1) var texture: texture_2d<f32>; 38@group(constants::MATERIAL_BIND_GROUP) @binding(2) var texture_sampler: sampler; 41const COLOR_MATERIAL_FLAGS_TEXTURE_BIT: u32 = 1u; 42const COLOR_MATERIAL_FLAGS_ALPHA_MODE_RESERVED_BITS: u32 = 3221225472u; 43const COLOR_MATERIAL_FLAGS_ALPHA_MODE_OPAQUE: u32 = 0u; 44const COLOR_MATERIAL_FLAGS_ALPHA_MODE_MASK: u32 = 1073741824u; 45const COLOR_MATERIAL_FLAGS_ALPHA_MODE_BLEND: u32 = 2147483648u; 50) -> @location(0) vec4<f32> { 51 let slot = mesh[in.instance_index].material_bind_group_slot; 54 var output_color: vec4<f32> = color_materials[color_material_indices[slot].material].color; 56 var output_color: vec4<f32> = material.color; 59 output_color = output_color * in.color; 62 let uv_transform = color_materials[color_material_indices[slot].material].uv_transform; 64 let uv_transform = material.uv_transform; 66 let flags = color_materials[color_material_indices[slot].material].flags; 68 let flags = material.flags; 70 let alpha_cutoff = color_materials[color_material_indices[slot].material].alpha_cutoff; 72 let alpha_cutoff = material.alpha_cutoff; 74 let uv = (uv_transform * vec3(in.uv, 1.0)).xy; 76 if ((flags & COLOR_MATERIAL_FLAGS_TEXTURE_BIT) != 0u) { 78 output_color = output_color * textureSample( 79 bindless_textures_2d[color_material_indices[slot].color_texture], 80 bindless_samplers_filtering[color_material_indices[slot].color_sampler], 84 output_color = output_color * textureSample(texture, texture_sampler, uv); 87 output_color = alpha_discard(flags, alpha_cutoff, output_color); 90 output_color = tonemapping::tone_mapping(output_color, view.color_grading); 92 output_color = vec4(linear_to_srgb(output_color.rgb), output_color.a); 94 output_color = vec4(linear_rgb_to_oklab(output_color.rgb), output_color.a); 98fn alpha_discard(flags: u32, alpha_cutoff: f32, output_color: vec4<f32>) -> vec4<f32> { 99 var color = output_color; 100 let alpha_mode = flags & COLOR_MATERIAL_FLAGS_ALPHA_MODE_RESERVED_BITS; 101 if alpha_mode == COLOR_MATERIAL_FLAGS_ALPHA_MODE_OPAQUE { 107 if alpha_mode == COLOR_MATERIAL_FLAGS_ALPHA_MODE_MASK { 108 if color.a >= alpha_cutoff {