diff --git a/cvarinfo.marifx b/cvarinfo.marifx index 78a5b89..d0647fa 100644 --- a/cvarinfo.marifx +++ b/cvarinfo.marifx @@ -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"; diff --git a/language.txt b/language.txt index 75505b6..6b504be 100644 --- a/language.txt +++ b/language.txt @@ -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"; diff --git a/menudef.txt b/menudef.txt index a58d351..41df035 100644 --- a/menudef.txt +++ b/menudef.txt @@ -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" } diff --git a/shaders/glsl/mfx_palette.fp b/shaders/glsl/mfx_palette.fp index 8ea86cc..142bd87 100644 --- a/shaders/glsl/mfx_palette.fp +++ b/shaders/glsl/mfx_palette.fp @@ -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; diff --git a/zscript/mfx_handler.zsc b/zscript/mfx_handler.zsc index dde93f8..fd9fc60 100644 --- a/zscript/mfx_handler.zsc +++ b/zscript/mfx_handler.zsc @@ -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; }