mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-28 10:40:39 +00:00
(PS3) Added border shaders - we will need a subrepo for all these shaders eventually
This commit is contained in:
parent
a07514c88b
commit
ab687190a9
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
48
ps3/pkg/USRDIR/shaders/Borders/Menu/border-only.cg
Normal file
48
ps3/pkg/USRDIR/shaders/Borders/Menu/border-only.cg
Normal file
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user