diff --git a/libobs/data/area.effect b/libobs/data/area.effect index 1b420e432..c00773667 100644 --- a/libobs/data/area.effect +++ b/libobs/data/area.effect @@ -31,9 +31,8 @@ VertInOut VSDefault(VertData vert_in) return vert_out; } -float4 PSDrawAreaRGBA(FragData frag_in) : TARGET +float4 DrawArea(float2 uv) { - float2 uv = frag_in.uv; float2 uv_delta = float2(ddx(uv.x), ddy(uv.y)); // Handle potential OpenGL flip. @@ -83,7 +82,20 @@ float4 PSDrawAreaRGBA(FragData frag_in) : TARGET return total_color; } -float4 PSDrawAreaUpscaleRGBA(FragData frag_in) : TARGET +float4 PSDrawAreaRGBA(FragData frag_in) : TARGET +{ + return DrawArea(frag_in.uv); +} + +float4 PSDrawAreaRGBADivide(FragData frag_in) : TARGET +{ + float4 rgba = DrawArea(frag_in.uv); + float alpha = rgba.a; + float multiplier = (alpha > 0.0) ? (1.0 / alpha) : 0.0; + return float4(rgba.rgb * multiplier, alpha); +} + +float4 PSDrawAreaRGBAUpscale(FragData frag_in) : TARGET { float2 uv = frag_in.uv; float2 uv_delta = float2(ddx(uv.x), ddy(uv.y)); @@ -121,11 +133,20 @@ technique Draw } } +technique DrawAlphaDivide +{ + pass + { + vertex_shader = VSDefault(vert_in); + pixel_shader = PSDrawAreaRGBADivide(frag_in); + } +} + technique DrawUpscale { pass { vertex_shader = VSDefault(vert_in); - pixel_shader = PSDrawAreaUpscaleRGBA(frag_in); + pixel_shader = PSDrawAreaRGBAUpscale(frag_in); } }