Play with upscaling filters

This commit is contained in:
2025-11-29 09:44:12 +00:00
parent c5c494522c
commit 974f3e96c9
10 changed files with 456 additions and 115 deletions
+22 -5
View File
@@ -24,6 +24,16 @@ int i = int(( floor(vTexPos.x * screensize.x))) % 4;
int j = int(( floor(vTexPos.y * screensize.y))) % 4;
vec4 edgecase (vec3 e1, vec3 e2)
{ return vec4((t(e1,e2) && bt(e1,c) ? e1 : c),1); }
vec4 ttlcase (vec3 tt, vec3 tr, vec3 mr, vec3 br, vec3 bb, vec3 bl, vec3 ml, vec3 tl)
{
if (t(tl,tt) && t(tl,mr))
{return vec4(tl,1);}
if (t(tl,tt) && t(tl,ml))
{return vec4(tt,1);}
// if (t(tt,mr) && bt(tt,c))
// {return vec4(tt,1);}
return vec4(c,1);
}
vec4 corncase (vec3 e1, vec3 e2, vec3 corn)
{ return vec4( (t(e1,e2) && false == (t(corn,c)) ? e1 : c) , 1);}
//{ return vec4( (t(e1,e2) ? e1 : c) , 1);}
@@ -55,20 +65,28 @@ else
{ fColor = vec4(0,0,0,1);
switch (i * 10 + j) {
case 10:
fColor = ttlcase(bb,br,mr,tr,tt,tl,ml,bl);
break;
case 01:
fColor = edgecase(ml,bb);
fColor = ttlcase(ml,tl,tt,tr,mr,br,bb,bl);
break;
case 13:
fColor = ttlcase(tt,tr,mr,br,bb,bl,ml,tl);
break;
case 02:
fColor = edgecase(ml,tt);
fColor = ttlcase(ml,bl,bb,br,mr,tr,tt,tl);
break;
case 23:
fColor = ttlcase(tt,tl,ml,bl,bb,br,mr,tr);
break;
case 32:
fColor = edgecase(mr,tt);
fColor = ttlcase(mr,br,bb,bl,ml,tl,tt,tr);
break;
case 20:
fColor = ttlcase(bb,bl,ml,tl,tt,tr,mr,br);
break;
case 31:
fColor = edgecase(mr,bb);
fColor = ttlcase(mr,tr,tt,tl,ml,bl,bb,br);
break;
case 00:
fColor = corncase(ml,bb,bl);
@@ -78,7 +96,6 @@ else
break;
case 33:
fColor = corncase(mr,tt,tr);
//fColor = vec4(1,0,0,1);
break;
case 30:
fColor = corncase(mr,bb,br);
+105
View File
@@ -0,0 +1,105 @@
#version 450 core
in vec2 vTexPos;
out vec4 fColor;
layout (location = 0) uniform vec2 screensize;
layout(binding = 0) uniform sampler2D screenTexture;
vec3 f (float x, float y)
//{ return texture(screenTexture, vTexPos + vec2((x+0.5)/screensize.x,(y+0.5)/screensize.y)).xyz;
{ return texture(screenTexture, vTexPos + vec2(x/screensize.x,y/screensize.y)).xyz;
}
bool t (vec3 x, vec3 y)
{ return dot(x-y,x-y) < 0.005;
}
bool t3 (vec3 x, vec3 y, vec3 z)
{ return t(x,y) && t(y,z);
}
vec3 c = f(0,0);
bool bt (vec3 x, vec3 y)
{ return x.x+x.y+x.z > y.x+y.y+y.z;}
bool t4 (vec3 x, vec3 y, vec3 z)
{ return t(x,z) && (t(x,y) || bt(x,c)) ; }
bool incenter (int x) { return x > 0 && x < 3; }
int three = int(( floor(vTexPos.y * screensize.y))) % 3;
int i = int(( floor(vTexPos.x * screensize.x))) % 4;
int j = int(( floor(vTexPos.y * screensize.y))) % 4;
vec4 edgecase (vec3 e1, vec3 e2)
{ return vec4((t(e1,e2) && bt(e1,c) ? e1 : c),1); }
vec4 ttlcase (vec3 tt, vec3 tr, vec3 mr, vec3 br, vec3 bb, vec3 bl, vec3 ml, vec3 tl)
{
if (t(tl,tt) && t(tl,mr))
{return vec4(tl,1);}
if (t(tl,tt) && t(tl,ml))
{return vec4(tt,1);}
// if (t(tt,mr) && bt(tt,c))
// {return vec4(tt,1);}
return vec4(c,1);
}
vec4 corncase (vec3 e1, vec3 e2, vec3 corn)
{ return vec4( (t(e1,e2) && false == (t(corn,c)) ? e1 : c) , 1);}
//{ return vec4( (t(e1,e2) ? e1 : c) , 1);}
void main()
{
vec3 tl = f(-4, 4);
vec3 tt = f( 0, 4);
vec3 tr = f( 4, 4);
vec3 mr = f( 4, 0);
vec3 br = f( 4,-4);
vec3 bb = f( 0,-4);
vec3 bl = f(-4,-4);
vec3 ml = f(-4, 0);
vec3 tlc = f(-1, 1);
vec3 trc = f( 1, 1);
vec3 brc = f( 1,-1);
vec3 blc = f(-1,-1);
// if (t4(tl,tr,br))
// { fColor = vec4(tl,1);}
// else if (t4(tr,br,bl))
// { fColor = vec4(tr,1);}
// else if (t4(br,bl,tl))
// { fColor = vec4(br,1);}
// else if (t4(bl,tl,tr))
// { fColor = vec4(bl,1);}
if (incenter(i) && incenter(j))
{fColor = vec4(c,1); }
else
{ fColor = vec4(0,0,0,1);
switch (i * 10 + j) {
case 10:
fColor = ttlcase(bb,br,mr,tr,tt,tl,ml,bl);
break;
case 01:
fColor = ttlcase(ml,tl,tt,tr,mr,br,bb,bl);
break;
case 13:
fColor = ttlcase(tt,tr,mr,br,bb,bl,ml,tl);
break;
case 02:
fColor = ttlcase(ml,bl,bb,br,mr,tr,tt,tl);
break;
case 23:
fColor = ttlcase(tt,tl,ml,bl,bb,br,mr,tr);
break;
case 32:
fColor = ttlcase(mr,br,bb,bl,ml,tl,tt,tr);
break;
case 20:
fColor = ttlcase(bb,bl,ml,tl,tt,tr,mr,br);
break;
case 31:
fColor = ttlcase(mr,tr,tt,tl,ml,bl,bb,br);
break;
case 00:
fColor = corncase(ml,bb,bl);
break;
case 03:
fColor = corncase(ml,tt,tl);
break;
case 33:
fColor = corncase(mr,tt,tr);
break;
case 30:
fColor = corncase(mr,bb,br);
break;
}
}
}
+88
View File
@@ -0,0 +1,88 @@
#version 450 core
in vec2 vTexPos;
out vec4 fColor;
layout (location = 0) uniform vec2 screensize;
layout(binding = 0) uniform sampler2D screenTexture;
vec3 f (float x, float y)
//{ return texture(screenTexture, vTexPos + vec2((x+0.5)/screensize.x,(y+0.5)/screensize.y)).xyz;
{ return texture(screenTexture, vTexPos + vec2(x/screensize.x,y/screensize.y)).xyz;
}
bool t (vec3 x, vec3 y)
{ return dot(x-y,x-y) < 0.005;
}
bool t3 (vec3 x, vec3 y, vec3 z)
{ return t(x,y) && t(y,z);
}
vec3 c = f(0,0);
bool bt (vec3 x, vec3 y)
{ return x.x+x.y+x.z > y.x+y.y+y.z;}
bool t4 (vec3 x, vec3 y, vec3 z)
{ return t(x,z) && (t(x,y) || bt(x,c)) ; }
bool incenter (int x) { return x > 0 && x < 3; }
int three = int(( floor(vTexPos.y * screensize.y))) % 3;
int i = int(( floor(vTexPos.x * screensize.x))) % 4;
int j = int(( floor(vTexPos.y * screensize.y))) % 4;
vec4 edgecase (vec3 e1, vec3 e2)
{ return vec4((t(e1,e2) && bt(e1,c) ? e1 : c),1); }
vec4 corncase (vec3 e1, vec3 e2, vec3 corn)
{ return vec4( (t(e1,e2) && false == (t(corn,c)) ? e1 : c) , 1);}
//{ return vec4( (t(e1,e2) ? e1 : c) , 1);}
void main()
{
vec3 tl = f(-4, 4);
vec3 tt = f( 0, 4);
vec3 tr = f( 4, 4);
vec3 mr = f( 4, 0);
vec3 br = f( 4,-4);
vec3 bb = f( 0,-4);
vec3 bl = f(-4,-4);
vec3 ml = f(-4, 0);
vec3 tlc = f(-1, 1);
vec3 trc = f( 1, 1);
vec3 brc = f( 1,-1);
vec3 blc = f(-1,-1);
// if (t4(tl,tr,br))
// { fColor = vec4(tl,1);}
// else if (t4(tr,br,bl))
// { fColor = vec4(tr,1);}
// else if (t4(br,bl,tl))
// { fColor = vec4(br,1);}
// else if (t4(bl,tl,tr))
// { fColor = vec4(bl,1);}
if (incenter(i) && incenter(j))
{fColor = vec4(c,1); }
else
{ fColor = vec4(0,0,0,1);
switch (i * 10 + j) {
case 10:
case 01:
fColor = edgecase(ml,bb);
break;
case 13:
case 02:
fColor = edgecase(ml,tt);
break;
case 23:
case 32:
fColor = edgecase(mr,tt);
break;
case 20:
case 31:
fColor = edgecase(mr,bb);
break;
case 00:
fColor = corncase(ml,bb,bl);
break;
case 03:
fColor = corncase(ml,tt,tl);
break;
case 33:
fColor = corncase(mr,tt,tr);
//fColor = vec4(1,0,0,1);
break;
case 30:
fColor = corncase(mr,bb,br);
break;
}
}
}
+111
View File
@@ -0,0 +1,111 @@
#version 450 core
in vec2 vTexPos;
out vec4 fColor;
layout (location = 0) uniform vec2 screensize;
layout(binding = 0) uniform sampler2D screenTexture;
vec3 f (float x, float y)
//{ return texture(screenTexture, vTexPos + vec2((x+0.5)/screensize.x,(y+0.5)/screensize.y)).xyz;
{ return texture(screenTexture, vTexPos + vec2(x/screensize.x,y/screensize.y)).xyz;
}
bool t (vec3 x, vec3 y)
{ return dot(x-y,x-y) < 0.005;
}
bool t3 (vec3 x, vec3 y, vec3 z)
{ return t(x,y) && t(y,z);
}
//vec3 c = f(0,0);
vec3 c = texelFetch(screenTexture
,ivec2(floor(0.25*vTexPos.x*screensize.x),floor(0.25*vTexPos.y*screensize.y))
, 0).xyz;
bool bt (vec3 x, vec3 y)
{ return x.x+x.y+x.z > y.x+y.y+y.z;}
bool t4 (vec3 x, vec3 y, vec3 z)
{ return t(x,z) && (t(x,y) || bt(x,c)) ; }
bool incenter (int x) { return x > 0 && x < 3; }
int three = int(( floor(vTexPos.y * screensize.y))) % 3;
int i = int(( floor(vTexPos.x * screensize.x))) % 4;
int j = int(( floor(vTexPos.y * screensize.y))) % 4;
vec4 edgecase (vec3 e1, vec3 e2)
{ return vec4((t(e1,e2) && bt(e1,c) ? e1 : c),1); }
vec4 ttlcase (vec3 tt, vec3 tr, vec3 mr, vec3 br, vec3 bb, vec3 bl, vec3 ml, vec3 tl)
{
if (t(tl,tt) && t(tl,mr))
{return vec4(tl,1);}
if (t(tl,tt) && t(tl,ml))
{return vec4(tt,1);}
// if (t(tt,mr) && bt(tt,c))
// {return vec4(tt,1);}
return vec4(c,1);
}
vec4 corncase (vec3 e1, vec3 e2, vec3 corn)
{ return vec4( (t(e1,e2) && false == (t(corn,c)) ? e1 : c) , 1);}
//{ return vec4( (t(e1,e2) ? e1 : c) , 1);}
void main()
{
vec3 tl = f(-4, 4);
vec3 tt = f( 0, 4);
vec3 tr = f( 4, 4);
vec3 mr = f( 4, 0);
vec3 br = f( 4,-4);
vec3 bb = f( 0,-4);
vec3 bl = f(-4,-4);
vec3 ml = f(-4, 0);
vec3 tlc = f(-1, 1);
vec3 trc = f( 1, 1);
vec3 brc = f( 1,-1);
vec3 blc = f(-1,-1);
// if (t4(tl,tr,br))
// { fColor = vec4(tl,1);}
// else if (t4(tr,br,bl))
// { fColor = vec4(tr,1);}
// else if (t4(br,bl,tl))
// { fColor = vec4(br,1);}
// else if (t4(bl,tl,tr))
// { fColor = vec4(bl,1);}
if (incenter(i) && incenter(j))
{fColor = vec4(c,1); }
//{fColor = vec4(0,0,0,1); }
//else {fColor = vec4(f(0,0),1);}
else {fColor = vec4(c,1);}
//else
// { fColor = vec4(0,0,0,1);
// switch (i * 10 + j) {
// case 10:
// fColor = ttlcase(bb,br,mr,tr,tt,tl,ml,bl);
// break;
// case 01:
// fColor = ttlcase(ml,tl,tt,tr,mr,br,bb,bl);
// break;
// case 13:
// fColor = ttlcase(tt,tr,mr,br,bb,bl,ml,tl);
// break;
// case 02:
// fColor = ttlcase(ml,bl,bb,br,mr,tr,tt,tl);
// break;
// case 23:
// fColor = ttlcase(tt,tl,ml,bl,bb,br,mr,tr);
// break;
// case 32:
// fColor = ttlcase(mr,br,bb,bl,ml,tl,tt,tr);
// break;
// case 20:
// fColor = ttlcase(bb,bl,ml,tl,tt,tr,mr,br);
// break;
// case 31:
// fColor = ttlcase(mr,tr,tt,tl,ml,bl,bb,br);
// break;
// case 00:
// fColor = corncase(ml,bb,bl);
// break;
// case 03:
// fColor = corncase(ml,tt,tl);
// break;
// case 33:
// fColor = corncase(mr,tt,tr);
// break;
// case 30:
// fColor = corncase(mr,bb,br);
// break;
// }
// }
}