diff --git a/shader/texture/antia.frag b/shader/texture/antia.frag index e477069d9..81fdbe791 100644 --- a/shader/texture/antia.frag +++ b/shader/texture/antia.frag @@ -3,19 +3,35 @@ in vec2 vTexPos; out vec4 fColor; layout (location = 0) uniform vec2 screensize; layout(binding = 0) uniform sampler2D screenTexture; -float xoff = 2 / screensize.x; -float yoff = 2 / screensize.y; vec3 f (float x, float y) -{ return texture(screenTexture, vTexPos + vec2(x*xoff,y*yoff)).xyz; +//{ 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.1; +} +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, 1); +vec3 tt = f( 0, 2); vec3 tr = f( 1, 1); -vec3 mr = f( 1, 0); +vec3 mr = f( 2, 0); vec3 br = f( 1,-1); - if (tl == tt && tt == tr && tr == mr && mr == br) +vec3 bb = f( 0,-2); +vec3 bl = f(-1,-1); +vec3 ml = f(-2, 0); + if (t3(tt,tr,mr)) + { fColor = vec4(tr,1);} + else if (t3(mr,br,bb)) + { fColor = vec4(br,1);} + else if (t3(bb,bl,ml)) + { fColor = vec4(bl,1);} + else if (t3(ml,tl,tt)) { fColor = vec4(tl,1);} - else {fColor = texture(screenTexture, vTexPos); } + else + //{fColor = texture(screenTexture, vTexPos); } + {fColor = vec4(f(0,0),1); } } diff --git a/src/Dodge/Data/Config.hs b/src/Dodge/Data/Config.hs index 2ff6e0577..b4a92c7f3 100644 --- a/src/Dodge/Data/Config.hs +++ b/src/Dodge/Data/Config.hs @@ -49,6 +49,7 @@ data Config = Config { _volume_master :: Float , _volume_sound :: Float , _volume_music :: Float + , _gr_upscale_filter :: Bool , _gr_cloud_shadows :: Bool , _gr_distortions :: Bool , _gr_bloom :: Bool @@ -152,6 +153,7 @@ defaultConfig = { _volume_master = 1 , _volume_sound = 1 , _volume_music = 0 + , _gr_upscale_filter = True , _gr_cloud_shadows = True , _gr_bloom = True , _gr_shadow_rendering = GeoObjShads diff --git a/src/Dodge/Menu.hs b/src/Dodge/Menu.hs index cd6e8f8a1..bcc79e571 100644 --- a/src/Dodge/Menu.hs +++ b/src/Dodge/Menu.hs @@ -189,6 +189,7 @@ graphicsMenuOptions :: [MenuOption] graphicsMenuOptions = [ enumOption gr_world_res "World resolution" (uvIOEffects .~ updatePreload) , enumOption gr_downsize_res "Downsize resolution" (uvIOEffects .~ updatePreload) + , boolOption gr_upscale_filter "UPSCALE FILTER" , enumOption gr_shadow_rendering "SHADOW RENDERING" id , enumOption gr_shadows_on_clouds "SHADOW DETAIL ON CLOUDS" id , enumOption gr_shadow_size "SHADOW DETAIL" id diff --git a/src/Dodge/Render.hs b/src/Dodge/Render.hs index 9217dfa5f..5deb87df6 100644 --- a/src/Dodge/Render.hs +++ b/src/Dodge/Render.hs @@ -368,8 +368,10 @@ doDrawing' win pdata u = do [] -> do glBindTextureUnit 0 $ pdata ^. fboBase . _2 . _1 . unTO glBindFramebuffer GL_FRAMEBUFFER 0 - glUseProgram (pdata ^. textureAntiaShader) - glUniform2f 0 (windowXFloat cfig) (windowYFloat cfig) + if (cfig ^. gr_upscale_filter) then do + glUseProgram (pdata ^. textureAntiaShader) + glUniform2f 0 (windowXFloat cfig) (windowYFloat cfig) + else glUseProgram (pdata ^. fullscreenShader) --glDrawArrays GL_TRIANGLES 0 6 glDrawArrays GL_TRIANGLES 0 3 rs' -> do