hiraku-engine 0.1.0

Hiraku visual-novel engine
#import bevy_pbr::forward_io::VertexOutput

struct MultiplyMaterial {
    tint: vec4<f32>,
    rect: vec4<f32>,
    opacity: f32,
    _padding: vec3<f32>,
};

@group(#{MATERIAL_BIND_GROUP}) @binding(0) var<uniform> material: MultiplyMaterial;
@group(#{MATERIAL_BIND_GROUP}) @binding(1) var color_texture: texture_2d<f32>;
@group(#{MATERIAL_BIND_GROUP}) @binding(2) var color_sampler: sampler;

@fragment
fn fragment(mesh: VertexOutput) -> @location(0) vec4<f32> {
    let texture_size = vec2<f32>(textureDimensions(color_texture));
    let uv = (material.rect.xy + mesh.uv * material.rect.zw) / texture_size;
    var color = textureSample(color_texture, color_sampler, uv) * material.tint;
    color.a *= material.opacity;
    if color.a <= 0.0001 {
        discard;
    }
    return vec4(color.rgb * color.a, color.a);
}