#version 450 layout(std140, set = 3, binding = 0) uniform UiUniforms { float background_opacity; } u_ui; layout(location = 0) in vec4 v_color; layout(location = 0) out vec4 o_col; void main() { // Preserve shape coverage for destination subtraction. The pipeline uses // the matching opacity blend constant for source alpha, so graphics laid // over a background with the same opacity do not accumulate opaque seams. // Text/cursor draw groups bind opacity 1 instead. o_col = vec4(v_color.rgb * clamp(u_ui.background_opacity, 0.0, 1.0), v_color.a); }