Tweak the dither math.

This commit is contained in:
Marisa the Magician 2023-02-26 18:03:11 +01:00
commit 05b33078fb
5 changed files with 12 additions and 6 deletions

View file

@ -120,7 +120,7 @@ nosave int mfx_palnum = 0;
nosave float mfx_palsat = 1.;
nosave float mfx_palpow = 1.;
nosave int mfx_paldither = 3;
nosave int mfx_paldepth = 6;
nosave int mfx_paldepth = 8;
nosave string mfx_presetname = "Unnamed";

View file

@ -78,6 +78,7 @@ MFX_PALETTE61="RGB3";
MFX_PALETTE62="RGB4";
MFX_PALETTE63="RGB5";
MFX_PALETTE64="RGB6";
MFX_DITHER0="No Dither";
MFX_DITHER1="Checkerboard";
MFX_DITHER2="Bayer 2x2";
MFX_DITHER3="Bayer 4x4";

View file

@ -107,6 +107,7 @@ OptionValue "MFXPalette"
OptionValue "MFXDither"
{
-1, "$MFX_DITHER0"
0, "$MFX_DITHER1"
1, "$MFX_DITHER2"
2, "$MFX_DITHER3"
@ -318,6 +319,6 @@ OptionMenu "MFXOptionsMenu"
MFXSlider "$MFX_PALSAT", "mfx_palsat", 0, 2, 0.01, 2
MFXSlider "$MFX_PALPOW", "mfx_palpow", 0, 2, 0.01, 2
Option "$MFX_PALDITHER", "mfx_paldither", "MFXDither"
MFXSlider "$MFX_PALDEPTH", "mfx_paldepth", 1, 6, 1, 0
MFXSlider "$MFX_PALDEPTH", "mfx_paldepth", 1, 16, 1, 0
SafeCommand "$MFX_RESET", "event resetmfxvars 7"
}

View file

@ -35,8 +35,8 @@ void main()
float dth = texelFetch(DitherTexture,dcoord,0).x*.9375+.03125;
vec3 thr = vec3(step(dth,cf.r),step(dth,cf.g),step(dth,cf.b));
res.rgb = mix(cl,ch,thr);
vec3 lc = clamp(floor(res.rgb*64.),0.,63.);
ivec2 lcoord = ivec2(lc.r,lc.g+lc.b*64);
vec3 lc = clamp(floor(res.rgb*63.),0.,63.);
ivec2 lcoord = ivec2(int(lc.r),int(lc.g)+int(lc.b)*64);
lcoord.x += 64*palnum;
res.rgb = texelFetch(PalLUTTexture,lcoord,0).rgb;
FragColor = res;

View file

@ -164,9 +164,13 @@ Class MariFXHandler : StaticEventHandler
Shader.SetUniform2f(p,"mfx_palette","sfact",mfx_retroenable?bresl:rresl);
Shader.SetUniform1f(p,"mfx_palette","palsat",mfx_palsat);
Shader.SetUniform1f(p,"mfx_palette","palpow",mfx_palpow);
Shader.SetUniform1i(p,"mfx_palette","paldepth",mfx_paldepth);
Shader.SetUniform1i(p,"mfx_palette","paldepth",int(2.**mfx_paldepth)-1);
switch ( mfx_paldither )
{
case 0:
Shader.SetUniform1i(p,"mfx_palette","dsize",2);
Shader.SetUniform1i(p,"mfx_palette","doffset",0);
break;
case 1:
Shader.SetUniform1i(p,"mfx_palette","dsize",2);
Shader.SetUniform1i(p,"mfx_palette","doffset",2);
@ -184,7 +188,7 @@ Class MariFXHandler : StaticEventHandler
Shader.SetUniform1i(p,"mfx_palette","doffset",16);
break;
default:
Shader.SetUniform1i(p,"mfx_palette","dsize",2);
Shader.SetUniform1i(p,"mfx_palette","dsize",1);
Shader.SetUniform1i(p,"mfx_palette","doffset",0);
break;
}