diff --git a/src/webview/mesh/webview_extend_standard_material.wgsl b/src/webview/mesh/webview_extend_standard_material.wgsl index cb9908a..a002bf8 100644 --- a/src/webview/mesh/webview_extend_standard_material.wgsl +++ b/src/webview/mesh/webview_extend_standard_material.wgsl @@ -11,6 +11,7 @@ } #import webview::util::{ surface_color, + overlay_color, } @fragment @@ -21,11 +22,18 @@ fn fragment( var out: FragmentOutput; var pbr_input = pbr_input_from_standard_material(in, is_front); - var alpha = pbr_input.material.base_color.a; - pbr_input.material.base_color *= surface_color(in.uv); - // pbr_input.material.base_color = alpha_discard(pbr_input.material, pbr_input.material.base_color); + // var alpha = pbr_input.material.base_color.a; - out.color = pbr_input.material.base_color * alpha; + if overlay_color(in.uv).a > 0.0 { + pbr_input.material.base_color *= surface_color(in.uv); + pbr_input.material.base_color *= overlay_color(in.uv); + } else { + pbr_input.material.base_color *= surface_color(in.uv); + } + + pbr_input.material.base_color = alpha_discard(pbr_input.material, pbr_input.material.base_color); + + out.color = pbr_input.material.base_color; // out.color.a *= alpha; return out; diff --git a/src/webview/mesh/webview_material.rs b/src/webview/mesh/webview_material.rs index a29cb00..7585f3c 100644 --- a/src/webview/mesh/webview_material.rs +++ b/src/webview/mesh/webview_material.rs @@ -30,6 +30,9 @@ pub struct WebviewMaterial { #[texture(101)] #[sampler(102)] pub surface: Option>, + #[texture(103)] + #[sampler(104)] + pub overlay: Option>, } impl Material for WebviewMaterial {} diff --git a/src/webview/mesh/webview_util.wgsl b/src/webview/mesh/webview_util.wgsl index 69538d1..9b8d65a 100644 --- a/src/webview/mesh/webview_util.wgsl +++ b/src/webview/mesh/webview_util.wgsl @@ -8,7 +8,13 @@ @group(#{MATERIAL_BIND_GROUP}) @binding(101) var surface_texture: texture_2d; @group(#{MATERIAL_BIND_GROUP}) @binding(102) var surface_sampler: sampler; +@group(#{MATERIAL_BIND_GROUP}) @binding(103) var overlay_texture: texture_2d; +@group(#{MATERIAL_BIND_GROUP}) @binding(104) var overlay_sampler: sampler; + fn surface_color(uv: vec2) -> vec4 { - // let flip = vec2(1.0 - uv.x, uv.y); return textureSampleBias(surface_texture, surface_sampler, uv, view.mip_bias); +} + +fn overlay_color(uv: vec2) -> vec4 { + return textureSampleBias(overlay_texture, overlay_sampler, uv, view.mip_bias); } \ No newline at end of file