(PS3) Added Git subrepo for shaders

This commit is contained in:
TwinAphex51224 2012-01-27 23:35:38 +01:00 committed by Themaister
parent fcab353201
commit 5bfc7be450
18 changed files with 5 additions and 1026 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "ps3/pkg/USRDIR/shaders"]
path = ps3/pkg/USRDIR/shaders
url = git@github.com:twinaphex/common-shaders.git

View File

@ -73,6 +73,7 @@ $(PPU_TARGET): $(OBJ)
pkg: $(PPU_TARGET)
cp ssnes.cfg ps3/pkg/USRDIR/
cp ps3/override/border-only.cg ps3/pkg/USRDIR/shaders/Borders/Menu/
$(MAKE_FSELF_NPDRM) $(PPU_TARGET) ps3/pkg/USRDIR/EBOOT.BIN
$(MAKE_PACKAGE_NPDRM) ps3/pkg/package.conf ps3/pkg

@ -0,0 +1 @@
Subproject commit 8603f0e02d384433e79d0833d98ea284cba55c73

View File

@ -1,77 +0,0 @@
/*
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);
}

View File

@ -1,67 +0,0 @@
/*
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);
}

View File

@ -1,67 +0,0 @@
/*
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);
}

View File

@ -1,67 +0,0 @@
/*
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);
}

View File

@ -1,67 +0,0 @@
/*
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);
}

View File

@ -1,92 +0,0 @@
/*
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);
}

View File

@ -1,92 +0,0 @@
/*
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);
}

View File

@ -1,92 +0,0 @@
/*
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);
}

View File

@ -1,92 +0,0 @@
/*
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);
}

View File

@ -1,67 +0,0 @@
/*
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);
}

View File

@ -1,67 +0,0 @@
/*
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);
}

View File

@ -1,67 +0,0 @@
/*
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);
}

View File

@ -1,67 +0,0 @@
/*
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);
}

View File

@ -1,45 +0,0 @@
/*
VERTEX_SHADER
*/
void main_vertex
(
float4 position : POSITION,
float4 color : COLOR,
float2 texCoord : TEXCOORD0,
uniform float4x4 modelViewProj,
out float4 oPosition : POSITION,
out float4 oColor : COLOR,
out float2 otexCoord : TEXCOORD
)
{
oPosition = mul(modelViewProj, position);
oColor = color;
otexCoord = texCoord;
}
/*
FRAGMENT SHADER
*/
struct output
{
float4 color : COLOR;
};
struct input
{
float2 video_size;
float2 texture_size;
float2 output_size;
};
output main_fragment(float2 texCoord : TEXCOORD0, uniform sampler2D decal : TEXUNIT0, uniform input IN)
{
output OUT;
OUT.color = tex2D(decal, texCoord);
return OUT;
}