mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-05 11:28:17 -04:00
CommonFilters: fix edge bleeding when using POT textures (LP 424640)
This commit is contained in:
parent
b41496b17a
commit
3eb91e38b5
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user