diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Aspect/border-aspect.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Aspect/border-aspect.cg new file mode 100644 index 0000000000..6c94d5bfba --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Aspect/border-aspect.cg @@ -0,0 +1,77 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 1920x1080 border. :) +// Puts game in middle. + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float in_aspect = 16.0 / 9.0; +const float out_aspect = 4.0 / 3.0; + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD0, + float2 oTex : TEXCOORD0, + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + out float2 border, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 middle = 0.5 * IN.video_size / IN.texture_size; + + float dist = tex.x - middle.x; + float x = middle.x + dist.x * in_aspect / out_aspect; + oTex = float2(x, tex.y); + + border = float2(0.5 - out_aspect / in_aspect, 0.5 + out_aspect / in_aspect); + + otex_border = tex_border; +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, + float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN, + in float2 border) : COLOR +{ + float4 background = tex2D(bg, tex_border); + float4 source_image = tex2D(s0, tex); + + float sel; + if (tex.x < border.x || tex.x > border.y) + { + sel = 0.0; + } + else + { + sel = 1.0; + } + + return lerp(background, source_image, sel); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-fbo-scale-1x.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-fbo-scale-1x.cg new file mode 100644 index 0000000000..3c233aa60d --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-fbo-scale-1x.cg @@ -0,0 +1,67 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 4.0; // 4x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.5 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + return float4(back.rgb, back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-fbo-scale-2x.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-fbo-scale-2x.cg new file mode 100644 index 0000000000..787c900761 --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-fbo-scale-2x.cg @@ -0,0 +1,67 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 2.0; // 2x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.5 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + return float4(back.rgb, back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-fbo-scale-4x.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-fbo-scale-4x.cg new file mode 100644 index 0000000000..438a6cdb27 --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-fbo-scale-4x.cg @@ -0,0 +1,67 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 1.0; // 1x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.5 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + return float4(back.rgb, back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-non-fbo.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-non-fbo.cg new file mode 100644 index 0000000000..3c233aa60d --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-non-fbo.cg @@ -0,0 +1,67 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 4.0; // 4x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.5 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + return float4(back.rgb, back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-fbo-scale-1x.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-fbo-scale-1x.cg new file mode 100644 index 0000000000..85cb223790 --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-fbo-scale-1x.cg @@ -0,0 +1,92 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 4.0; // 4x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.5 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float apply_wave(float2 pos, float2 src, float cnt) +{ + float2 diff = pos - src; + float dist = 300.0 * sqrt(dot(diff, diff)); + dist -= 0.15 * cnt; + return sin(dist); +} + +const float2 src0 = float2(0.6, 0.7); +const float2 src1 = float2(0.9, 0.9); +const float2 src2 = float2(-0.6, 0.3); +const float2 src3 = float2(0.1, 0.4); +const float2 src4 = float2(0.1, 0.4); +const float2 src5 = float2(0.5, 0.5); +const float2 src6 = float2(-1.0, 1.0); + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + float cnt = frame_count; + float res = apply_wave(coord, src0, cnt); + res += apply_wave(coord, src1, cnt); + res += apply_wave(coord, src2, cnt); + res += apply_wave(coord, src3, cnt); + res += apply_wave(coord, src4, cnt); + res += apply_wave(coord, src5, cnt); + res += apply_wave(coord, src6, cnt); + + return float4(back.rgb * (0.7 + 0.05 * res), back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-fbo-scale-2x.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-fbo-scale-2x.cg new file mode 100644 index 0000000000..03750aac64 --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-fbo-scale-2x.cg @@ -0,0 +1,92 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 2.0; // 2x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.5 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float apply_wave(float2 pos, float2 src, float cnt) +{ + float2 diff = pos - src; + float dist = 300.0 * sqrt(dot(diff, diff)); + dist -= 0.15 * cnt; + return sin(dist); +} + +const float2 src0 = float2(0.6, 0.7); +const float2 src1 = float2(0.9, 0.9); +const float2 src2 = float2(-0.6, 0.3); +const float2 src3 = float2(0.1, 0.4); +const float2 src4 = float2(0.1, 0.4); +const float2 src5 = float2(0.5, 0.5); +const float2 src6 = float2(-1.0, 1.0); + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + float cnt = frame_count; + float res = apply_wave(coord, src0, cnt); + res += apply_wave(coord, src1, cnt); + res += apply_wave(coord, src2, cnt); + res += apply_wave(coord, src3, cnt); + res += apply_wave(coord, src4, cnt); + res += apply_wave(coord, src5, cnt); + res += apply_wave(coord, src6, cnt); + + return float4(back.rgb * (0.7 + 0.05 * res), back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-fbo-scale-4x.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-fbo-scale-4x.cg new file mode 100644 index 0000000000..b24f618692 --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-fbo-scale-4x.cg @@ -0,0 +1,92 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 1.0; // 1x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.5 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float apply_wave(float2 pos, float2 src, float cnt) +{ + float2 diff = pos - src; + float dist = 300.0 * sqrt(dot(diff, diff)); + dist -= 0.15 * cnt; + return sin(dist); +} + +const float2 src0 = float2(0.6, 0.7); +const float2 src1 = float2(0.9, 0.9); +const float2 src2 = float2(-0.6, 0.3); +const float2 src3 = float2(0.1, 0.4); +const float2 src4 = float2(0.1, 0.4); +const float2 src5 = float2(0.5, 0.5); +const float2 src6 = float2(-1.0, 1.0); + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + float cnt = frame_count; + float res = apply_wave(coord, src0, cnt); + res += apply_wave(coord, src1, cnt); + res += apply_wave(coord, src2, cnt); + res += apply_wave(coord, src3, cnt); + res += apply_wave(coord, src4, cnt); + res += apply_wave(coord, src5, cnt); + res += apply_wave(coord, src6, cnt); + + return float4(back.rgb * (0.7 + 0.05 * res), back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-non-fbo.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-non-fbo.cg new file mode 100644 index 0000000000..85cb223790 --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Centered/border-centered-water-non-fbo.cg @@ -0,0 +1,92 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 4.0; // 4x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.5 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float apply_wave(float2 pos, float2 src, float cnt) +{ + float2 diff = pos - src; + float dist = 300.0 * sqrt(dot(diff, diff)); + dist -= 0.15 * cnt; + return sin(dist); +} + +const float2 src0 = float2(0.6, 0.7); +const float2 src1 = float2(0.9, 0.9); +const float2 src2 = float2(-0.6, 0.3); +const float2 src3 = float2(0.1, 0.4); +const float2 src4 = float2(0.1, 0.4); +const float2 src5 = float2(0.5, 0.5); +const float2 src6 = float2(-1.0, 1.0); + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + float cnt = frame_count; + float res = apply_wave(coord, src0, cnt); + res += apply_wave(coord, src1, cnt); + res += apply_wave(coord, src2, cnt); + res += apply_wave(coord, src3, cnt); + res += apply_wave(coord, src4, cnt); + res += apply_wave(coord, src5, cnt); + res += apply_wave(coord, src6, cnt); + + return float4(back.rgb * (0.7 + 0.05 * res), back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-fbo-scale-1x.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-fbo-scale-1x.cg new file mode 100644 index 0000000000..065f37937b --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-fbo-scale-1x.cg @@ -0,0 +1,67 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 4.0; // 4x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.2 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + return float4(back.rgb, back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-fbo-scale-2x.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-fbo-scale-2x.cg new file mode 100644 index 0000000000..72365a59ba --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-fbo-scale-2x.cg @@ -0,0 +1,67 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 2.0; // 2x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.2 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + return float4(back.rgb, back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-fbo-scale-4x.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-fbo-scale-4x.cg new file mode 100644 index 0000000000..d9fa35da65 --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-fbo-scale-4x.cg @@ -0,0 +1,67 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 1.0; // 1x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.2 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + return float4(back.rgb, back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-non-fbo.cg b/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-non-fbo.cg new file mode 100644 index 0000000000..065f37937b --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Border-Left-Portrait/border-left-portrait-non-fbo.cg @@ -0,0 +1,67 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 4x input scale, 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float box_scale = 4.0; // 4x scale. +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + out float2 oTex : TEXCOORD, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 corrected_size = float2(256.0, 224.0) * (4.0 / box_scale); + float2 scale = (IN.output_size / corrected_size) / box_scale; + float2 middle = 0.2 * IN.video_size / IN.texture_size; + float2 diff = tex.xy - middle; + oTex = middle + diff * scale; + + middle = float2(0.5, 0.5); + float2 dist = tex_border - middle; + otex_border = middle + dist * IN.output_size / out_res; +} + +float4 conv_background(float4 back, float2 coord, float frame_count) +{ + return float4(back.rgb, back.a); +} + +float4 main_fragment ( + float2 tex : TEXCOORD0, float2 tex_border : TEXCOORD1, + uniform sampler2D s0 : TEXUNIT0, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 frame = tex2D(s0, tex); + float4 background = conv_background(tex2D(bg, tex_border), tex_border, IN.frame_count); + return lerp(frame, background, background.a); +} + + diff --git a/ps3/pkg/USRDIR/shaders/Borders/Menu/border-only.cg b/ps3/pkg/USRDIR/shaders/Borders/Menu/border-only.cg new file mode 100644 index 0000000000..5088c0748e --- /dev/null +++ b/ps3/pkg/USRDIR/shaders/Borders/Menu/border-only.cg @@ -0,0 +1,48 @@ +/* + Author: Themaister + License: Public domain +*/ + +// Border shader. 1920x1080 border. :) + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; + float frame_count; +}; + +const float2 out_res = float2(1920.0, 1080.0); // Output target size. + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex_border : TEXCOORD1, + out float2 otex_border : TEXCOORD1, + + uniform input IN +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + otex_border = tex_border; +} + +float4 main_fragment ( + float2 tex_border : TEXCOORD1, + uniform sampler2D bg, + uniform input IN) : COLOR +{ + float4 background = tex2D(bg, tex_border); + return background; +} + +