libobs: Fix Area shaders missing for RGB output

Area downscale setting currently only works with YUV outputs. This adds
the missing DrawAlphaDivide technique.
This commit is contained in:
jpark37 2019-08-31 00:25:24 -07:00
parent 05888fc3aa
commit 9bdb16aa78

View File

@ -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);
}
}