From c00883029803ec740519df5c31b0384422a56e8c Mon Sep 17 00:00:00 2001 From: James Brundage <@github.com> Date: Wed, 14 Feb 2024 17:10:07 -0800 Subject: [PATCH] feat: Zoom XY Shader ( Fixes #199 ) --- Shaders/Zoom_XY.shader | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Shaders/Zoom_XY.shader diff --git a/Shaders/Zoom_XY.shader b/Shaders/Zoom_XY.shader new file mode 100644 index 000000000..36d74c7ff --- /dev/null +++ b/Shaders/Zoom_XY.shader @@ -0,0 +1,44 @@ +// Zoom XY Shader + +// A simple twist on the Zoom Shader in https://github.com/exeldro/obs-shaderfilter/ + +// The allow for an independent Horizontal and Vertical Zoom. + +uniform int center_x_percent< + string label = "center x percent"; + string widget_type = "slider"; + int minimum = 0; + int maximum = 100; + int step = 1; +> = 50; +uniform int center_y_percent< + string label = "center y percent"; + string widget_type = "slider"; + int minimum = 0; + int maximum = 100; + int step = 1; +> = 50; +uniform float x_power< + string label = "x power"; + string widget_type = "slider"; + float minimum = 0; + float maximum = 20.0; + float step = 0.001; +> = 1; + +uniform float y_power< + string label = "y power"; + string widget_type = "slider"; + float minimum = 0; + float maximum = 20.0; + float step = 0.001; +> = 1; + +float4 mainImage(VertData v_in) : TARGET +{ + float2 center_pos = float2(center_x_percent * .01, center_y_percent * .01); + float2 uv = v_in.uv; + uv.x = (v_in.uv.x - center_pos.x) * x_power + center_pos.x; + uv.y = (v_in.uv.y - center_pos.y) * y_power + center_pos.y; + return image.Sample(textureSampler, uv); +} \ No newline at end of file