CommonFilters: fix edge bleeding when using POT textures (LP 424640)

This commit is contained in:
rdb 2017-06-20 19:37:57 +02:00
parent b41496b17a
commit 3eb91e38b5
4 changed files with 18 additions and 12 deletions

View File

@ -12,8 +12,9 @@ void vshader(float4 vtx_position : POSITION,
l_position=mul(mat_modelproj, vtx_position);
float2 c=(vtx_position.xz * texpad_src.xy) + texpad_src.xy;
float offset = texpix_src.x;
l_texcoord0 = float4(c.x-offset* -4, c.x-offset* -3, c.x-offset* -2, c.y);
l_texcoord1 = float4(c.x-offset* -1, c.x-offset* 0, c.x-offset* 1, c.y);
float pad = texpad_src.x * 2;
l_texcoord0 = float4(min(c.x-offset* -4, pad), min(c.x-offset* -3, pad), min(c.x-offset* -2, pad), c.y);
l_texcoord1 = float4(min(c.x-offset* -1, pad), c.x-offset* 0, c.x-offset* 1, c.y);
l_texcoord2 = float4(c.x-offset* 2, c.x-offset* 3, c.x-offset* 4, c.y);
}

View File

@ -12,8 +12,9 @@ void vshader(float4 vtx_position : POSITION,
l_position=mul(mat_modelproj, vtx_position);
float2 c=(vtx_position.xz * texpad_src.xy) + texpad_src.xy;
float offset = texpix_src.y;
l_texcoord0 = float4(c.y-offset* -4, c.y-offset* -3, c.y-offset* -2, c.x);
l_texcoord1 = float4(c.y-offset* -1, c.y-offset* 0, c.y-offset* 1, c.x);
float pad = texpad_src.y * 2;
l_texcoord0 = float4(min(c.y-offset* -4, pad), min(c.y-offset* -3, pad), min(c.y-offset* -2, pad), c.x);
l_texcoord1 = float4(min(c.y-offset* -1, pad), c.y-offset* 0, c.y-offset* 1, c.x);
l_texcoord2 = float4(c.y-offset* 2, c.y-offset* 3, c.y-offset* 4, c.x);
}

View File

@ -2,7 +2,7 @@
//
//Cg profile arbvp1 arbfp1
void vshader(float4 vtx_position : POSITION,
void vshader(float4 vtx_position : POSITION,
float2 vtx_texcoord0 : TEXCOORD0,
out float4 l_position : POSITION,
out float2 l_texcoord0 : TEXCOORD0,
@ -17,16 +17,18 @@ void vshader(float4 vtx_position : POSITION,
void fshader(float2 l_texcoord0 : TEXCOORD0,
out float4 o_color : COLOR,
uniform float2 texpix_src,
uniform float4 texpad_src,
uniform sampler2D k_src : TEXUNIT0)
{
float pad = texpad_src.x * 2;
float3 offset = float3(1.0*texpix_src.x, 2.0*texpix_src.x, 3.0*texpix_src.x);
o_color = tex2D(k_src, l_texcoord0);
o_color += tex2D(k_src, float2(l_texcoord0.x - offset.z, l_texcoord0.y));
o_color += tex2D(k_src, float2(l_texcoord0.x - offset.y, l_texcoord0.y));
o_color += tex2D(k_src, float2(l_texcoord0.x - offset.x, l_texcoord0.y));
o_color += tex2D(k_src, float2(l_texcoord0.x + offset.x, l_texcoord0.y));
o_color += tex2D(k_src, float2(l_texcoord0.x + offset.y, l_texcoord0.y));
o_color += tex2D(k_src, float2(l_texcoord0.x + offset.z, l_texcoord0.y));
o_color += tex2D(k_src, float2(min(l_texcoord0.x + offset.x, pad), l_texcoord0.y));
o_color += tex2D(k_src, float2(min(l_texcoord0.x + offset.y, pad), l_texcoord0.y));
o_color += tex2D(k_src, float2(min(l_texcoord0.x + offset.z, pad), l_texcoord0.y));
o_color /= 7;
o_color.w = 1;
}

View File

@ -2,7 +2,7 @@
//
//Cg profile arbvp1 arbfp1
void vshader(float4 vtx_position : POSITION,
void vshader(float4 vtx_position : POSITION,
float2 vtx_texcoord0 : TEXCOORD0,
out float4 l_position : POSITION,
out float2 l_texcoord0 : TEXCOORD0,
@ -17,16 +17,18 @@ void vshader(float4 vtx_position : POSITION,
void fshader(float2 l_texcoord0 : TEXCOORD0,
out float4 o_color : COLOR,
uniform float2 texpix_src,
uniform float4 texpad_src,
uniform sampler2D k_src : TEXUNIT0)
{
float pad = texpad_src.y * 2;
float3 offset = float3(1.0*texpix_src.y, 2.0*texpix_src.y, 3.0*texpix_src.y);
o_color = tex2D(k_src, l_texcoord0);
o_color += tex2D(k_src, float2(l_texcoord0.x, l_texcoord0.y - offset.z));
o_color += tex2D(k_src, float2(l_texcoord0.x, l_texcoord0.y - offset.y));
o_color += tex2D(k_src, float2(l_texcoord0.x, l_texcoord0.y - offset.x));
o_color += tex2D(k_src, float2(l_texcoord0.x, l_texcoord0.y + offset.x));
o_color += tex2D(k_src, float2(l_texcoord0.x, l_texcoord0.y + offset.y));
o_color += tex2D(k_src, float2(l_texcoord0.x, l_texcoord0.y + offset.z));
o_color += tex2D(k_src, float2(l_texcoord0.x, min(l_texcoord0.y + offset.x, pad)));
o_color += tex2D(k_src, float2(l_texcoord0.x, min(l_texcoord0.y + offset.y, pad)));
o_color += tex2D(k_src, float2(l_texcoord0.x, min(l_texcoord0.y + offset.z, pad)));
o_color /= 7;
o_color.w = 1;
}