libobs: Add color spaces to deinterlace shaders

master
jpark37 2022-03-22 22:46:54 -07:00
parent 6fc5566f38
commit c455aaedba
9 changed files with 59 additions and 9 deletions

View File

@ -16,8 +16,11 @@
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/ */
#include "color.effect"
uniform float4x4 ViewProj; uniform float4x4 ViewProj;
uniform texture2d image; uniform texture2d image;
uniform float multiplier;
uniform texture2d previous_image; uniform texture2d previous_image;
uniform float2 dimensions; uniform float2 dimensions;
@ -264,7 +267,30 @@ VertData VSDefault(VertData v_in)
return vert_out; return vert_out;
} }
#define TECHNIQUE(rgba_ps) \ #define TECHNIQUE(rgba_ps, rgba_ps_multiply, rgba_ps_tonemap, rgba_ps_multiply_tonemap) \
float4 rgba_ps_multiply(VertData v_in) : TARGET \
{ \
float4 rgba = rgba_ps(v_in); \
rgba.rgb *= multiplier; \
return rgba; \
} \
float4 rgba_ps_tonemap(VertData v_in) : TARGET \
{ \
float4 rgba = rgba_ps(v_in); \
rgba.rgb = rec709_to_rec2020(rgba.rgb); \
rgba.rgb = reinhard(rgba.rgb); \
rgba.rgb = rec2020_to_rec709(rgba.rgb); \
return rgba; \
} \
float4 rgba_ps_multiply_tonemap(VertData v_in) : TARGET \
{ \
float4 rgba = rgba_ps(v_in); \
rgba.rgb *= multiplier; \
rgba.rgb = rec709_to_rec2020(rgba.rgb); \
rgba.rgb = reinhard(rgba.rgb); \
rgba.rgb = rec2020_to_rec709(rgba.rgb); \
return rgba; \
} \
technique Draw \ technique Draw \
{ \ { \
pass \ pass \
@ -272,4 +298,28 @@ technique Draw \
vertex_shader = VSDefault(v_in); \ vertex_shader = VSDefault(v_in); \
pixel_shader = rgba_ps(v_in); \ pixel_shader = rgba_ps(v_in); \
} \ } \
} \
technique DrawMultiply \
{ \
pass \
{ \
vertex_shader = VSDefault(v_in); \
pixel_shader = rgba_ps_multiply(v_in); \
} \
} \
technique DrawTonemap \
{ \
pass \
{ \
vertex_shader = VSDefault(v_in); \
pixel_shader = rgba_ps_tonemap(v_in); \
} \
} \
technique DrawMultiplyTonemap \
{ \
pass \
{ \
vertex_shader = VSDefault(v_in); \
pixel_shader = rgba_ps_multiply_tonemap(v_in); \
} \
} }

View File

@ -18,4 +18,4 @@
#include "deinterlace_base.effect" #include "deinterlace_base.effect"
TECHNIQUE(PSBlendRGBA); TECHNIQUE(PSBlendRGBA, PSBlendRGBA_multiply, PSBlendRGBA_tonemap, PSBlendRGBA_multiply_tonemap);

View File

@ -18,4 +18,4 @@
#include "deinterlace_base.effect" #include "deinterlace_base.effect"
TECHNIQUE(PSBlendRGBA_2x); TECHNIQUE(PSBlendRGBA_2x, PSBlendRGBA_2x_multiply, PSBlendRGBA_2x_tonemap, PSBlendRGBA_2x_multiply_tonemap);

View File

@ -18,4 +18,4 @@
#include "deinterlace_base.effect" #include "deinterlace_base.effect"
TECHNIQUE(PSDiscardRGBA); TECHNIQUE(PSDiscardRGBA, PSDiscardRGBA_multiply, PSDiscardRGBA_tonemap, PSDiscardRGBA_multiply_tonemap);

View File

@ -18,4 +18,4 @@
#include "deinterlace_base.effect" #include "deinterlace_base.effect"
TECHNIQUE(PSDiscardRGBA_2x); TECHNIQUE(PSDiscardRGBA_2x, PSDiscardRGBA_2x_multiply, PSDiscardRGBA_2x_tonemap, PSDiscardRGBA_2x_multiply_tonemap);

View File

@ -18,4 +18,4 @@
#include "deinterlace_base.effect" #include "deinterlace_base.effect"
TECHNIQUE(PSLinearRGBA); TECHNIQUE(PSLinearRGBA, PSLinearRGBA_multiply, PSLinearRGBA_tonemap, PSLinearRGBA_multiply_tonemap);

View File

@ -18,4 +18,4 @@
#include "deinterlace_base.effect" #include "deinterlace_base.effect"
TECHNIQUE(PSLinearRGBA_2x); TECHNIQUE(PSLinearRGBA_2x, PSLinearRGBA_2x_multiply, PSLinearRGBA_2x_tonemap, PSLinearRGBA_2x_multiply_tonemap);

View File

@ -18,4 +18,4 @@
#include "deinterlace_base.effect" #include "deinterlace_base.effect"
TECHNIQUE(PSYadifMode0RGBA); TECHNIQUE(PSYadifMode0RGBA, PSYadifMode0RGBA_multiply, PSYadifMode0RGBA_tonemap, PSYadifMode0RGBA_multiply_tonemap);

View File

@ -18,4 +18,4 @@
#include "deinterlace_base.effect" #include "deinterlace_base.effect"
TECHNIQUE(PSYadifMode0RGBA_2x); TECHNIQUE(PSYadifMode0RGBA_2x, PSYadifMode0RGBA_2x_multiply, PSYadifMode0RGBA_2x_tonemap, PSYadifMode0RGBA_2x_multiply_tonemap);