From c5c494522c1ab7cef6ed817e73e7eed06db65b2b Mon Sep 17 00:00:00 2001 From: justin Date: Thu, 27 Nov 2025 21:59:52 +0000 Subject: [PATCH] Play with upscaling shaders --- shader/texture/antia.frag | 89 +++++++++++++++++++++++++------- shader/texture/antia1.frag | 37 +++++++++++++ shader/texture/antia2.frag | 47 +++++++++++++++++ shader/texture/rgbscanlines.frag | 53 +++++++++++++++++++ src/Dodge/Render.hs | 2 +- src/Dodge/TestString.hs | 3 +- 6 files changed, 210 insertions(+), 21 deletions(-) create mode 100644 shader/texture/antia1.frag create mode 100644 shader/texture/antia2.frag create mode 100644 shader/texture/rgbscanlines.frag diff --git a/shader/texture/antia.frag b/shader/texture/antia.frag index cdfbdfb74..09293d84f 100644 --- a/shader/texture/antia.frag +++ b/shader/texture/antia.frag @@ -13,25 +13,76 @@ bool t (vec3 x, vec3 y) 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(-1, 1); -vec3 tt = f( 0, 2); -vec3 tr = f( 1, 1); -vec3 mr = f( 2, 0); -vec3 br = f( 1,-1); -vec3 bb = f( 0,-2); -vec3 bl = f(-1,-1); -vec3 ml = f(-2, 0); - if (t3(tl,tr,br)) - { fColor = vec4(tr,1);} - else if (t3(tr,br,bl)) - { fColor = vec4(br,1);} - else if (t3(br,bl,tl)) - { fColor = vec4(bl,1);} - else if (t3(bl,tl,tr)) - { fColor = vec4(tl,1);} - else - //{fColor = texture(screenTexture, vTexPos); } - {fColor = vec4(f(0,0),1); } +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; + } + } } diff --git a/shader/texture/antia1.frag b/shader/texture/antia1.frag new file mode 100644 index 000000000..cdfbdfb74 --- /dev/null +++ b/shader/texture/antia1.frag @@ -0,0 +1,37 @@ +#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); +} +void main() +{ +vec3 tl = f(-1, 1); +vec3 tt = f( 0, 2); +vec3 tr = f( 1, 1); +vec3 mr = f( 2, 0); +vec3 br = f( 1,-1); +vec3 bb = f( 0,-2); +vec3 bl = f(-1,-1); +vec3 ml = f(-2, 0); + if (t3(tl,tr,br)) + { fColor = vec4(tr,1);} + else if (t3(tr,br,bl)) + { fColor = vec4(br,1);} + else if (t3(br,bl,tl)) + { fColor = vec4(bl,1);} + else if (t3(bl,tl,tr)) + { fColor = vec4(tl,1);} + else + //{fColor = texture(screenTexture, vTexPos); } + {fColor = vec4(f(0,0),1); } +} diff --git a/shader/texture/antia2.frag b/shader/texture/antia2.frag new file mode 100644 index 000000000..ddaf91144 --- /dev/null +++ b/shader/texture/antia2.frag @@ -0,0 +1,47 @@ +#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)) ; +} +void main() +{ +vec3 tl = f(-2, 2); +vec3 tt = f( 0, 2); +vec3 tr = f( 2, 2); +vec3 mr = f( 2, 0); +vec3 br = f( 2,-2); +vec3 bb = f( 0,-2); +vec3 bl = f(-2,-2); +vec3 ml = f(-2, 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);} + else + //{fColor = texture(screenTexture, vTexPos); } + {fColor = vec4(c,1); } +} diff --git a/shader/texture/rgbscanlines.frag b/shader/texture/rgbscanlines.frag new file mode 100644 index 000000000..bd2c980ac --- /dev/null +++ b/shader/texture/rgbscanlines.frag @@ -0,0 +1,53 @@ +#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)) ; +} +int three = int(( floor(vTexPos.y * screensize.y))) % 3; +void main() +{ +vec3 tl = f(-2, 2); +vec3 tt = f( 0, 2); +vec3 tr = f( 2, 2); +vec3 mr = f( 2, 0); +vec3 br = f( 2,-2); +vec3 bb = f( 0,-2); +vec3 bl = f(-2,-2); +vec3 ml = f(-2, 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 (three == 0) + //{fColor = vec4(0,0,0,1);} + {fColor = vec4(c.x,0,0,1); } + //{fColor = texture(screenTexture, vTexPos); } + else if (three == 1) + {fColor = vec4(0,c.y,0,1); } + else + {fColor = vec4(0,0,c.z,1); } +} diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 5deb87df6..480dd3a38 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -384,7 +384,7 @@ doDrawing' win pdata u = do glUseProgram (pdata ^. barrelShader . _1) glUniform1i 0 (fromIntegral (length rs)) --glDrawArrays GL_TRIANGLES 0 6 - glDrawArrays GL_TRIANGLES 0 3 + glDrawArrays GL_TRIANGLES 0 6 glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA -- draw the overlay glDepthFunc GL_ALWAYS diff --git a/src/Dodge/TestString.hs b/src/Dodge/TestString.hs index 5fa0ecc6a..9cb9d03c6 100644 --- a/src/Dodge/TestString.hs +++ b/src/Dodge/TestString.hs @@ -32,7 +32,8 @@ import Data.Foldable import Data.Monoid testStringInit :: Universe -> [String] -testStringInit u = [ show (u ^. uvWorld . wCam . camRot) +testStringInit u = [ show (u ^. uvConfig . windowX) + , show (u ^. uvConfig . windowY) ,show $ fmap ( worldPosToScreen (u ^. uvWorld . wCam) ) $ u ^? uvWorld . cWorld . lWorld . creatures . ix 0 . crPos . _xy