diff --git a/cvarinfo.txt b/cvarinfo.marifx similarity index 84% rename from cvarinfo.txt rename to cvarinfo.marifx index efdf289..252f711 100644 --- a/cvarinfo.txt +++ b/cvarinfo.marifx @@ -1,3 +1,5 @@ +// BEGIN PRESET VARS + nosave bool mfx_lsharpenable = false; nosave float mfx_lsharpradius = .8; nosave float mfx_lsharpclamp = .05; @@ -30,6 +32,13 @@ nosave float mfx_gradesatpow = 1.; nosave float mfx_gradevalmul = 1.; nosave float mfx_gradevalpow = 1.; +nosave bool mfx_lutenable = false; +nosave int mfx_lutindex = 0; +nosave float mfx_lutblend = 1.; + +nosave bool mfx_techenable = false; +nosave float mfx_techblend = 1.; + nosave bool mfx_cmatenable = false; nosave float mfx_cmat_rr = 1.; nosave float mfx_cmat_rg = 0.; @@ -100,3 +109,17 @@ nosave int mfx_palnum = 0; nosave float mfx_palsat = 1.; nosave float mfx_palpow = 1.; nosave float mfx_paldither = .05; + +nosave string mfx_presetname = "Unnamed"; + +// END PRESET VARS + +nosave int mfx_presetslot = 0; +nosave string mfx_preset0 = ""; +nosave string mfx_preset1 = ""; +nosave string mfx_preset2 = ""; +nosave string mfx_preset3 = ""; +nosave string mfx_preset4 = ""; +nosave string mfx_preset5 = ""; +nosave string mfx_preset6 = ""; +nosave string mfx_preset7 = ""; diff --git a/gldefs.txt b/gldefs.txt index 1fc3b39..c41ea43 100644 --- a/gldefs.txt +++ b/gldefs.txt @@ -21,6 +21,22 @@ HardwareShader postprocess scene Uniform float gradevalpow } +HardwareShader postprocess scene +{ + Name "mfx_technicolor" + Shader "shaders/glsl/mfx_technicolor.fp" 330 + Uniform float techblend +} + +HardwareShader postprocess scene +{ + Name "mfx_lutgrading" + Shader "shaders/glsl/mfx_lutgrading.fp" 330 + Texture LUTTexture "textures/mfxlut.png" + Uniform int lutindex + Uniform float lutblend +} + HardwareShader postprocess scene { Name "mfx_colormatrix" diff --git a/language.txt b/language.txt index 52a17c0..4b27bdd 100644 --- a/language.txt +++ b/language.txt @@ -77,6 +77,22 @@ MFX_PALETTE61="RGB3"; MFX_PALETTE62="RGB4"; MFX_PALETTE63="RGB5"; MFX_PALETTE64="RGB6"; +MFX_LUT1="Skyrim Day"; +MFX_LUT2="Skyrim Interior Day"; +MFX_LUT3="Skyrim Interior Night"; +MFX_LUT4="Skyrim Night"; +MFX_LUT5="FNV Day"; +MFX_LUT6="FNV Interior"; +MFX_LUT7="FNV Night"; +MFX_LUT8="DUST Day"; +MFX_LUT9="DUST Interior"; +MFX_LUT10="DUST Night"; +MFX_LUT11="FO4 Day"; +MFX_LUT12="FO4 Interior"; +MFX_LUT13="FO4 Night"; +MFX_LUT14="FROST Day"; +MFX_LUT15="FROST Interior"; +MFX_LUT16="FROST Night"; MFX_ENABLE="Enable"; MFX_RESET="Reset to Default"; MFX_LUMASHARPEN="Luma Sharpen"; @@ -107,6 +123,11 @@ MFX_GRADESATMUL="Saturation Intensity"; MFX_GRADESATPOW="Saturation Gamma"; MFX_GRADEVALMUL="Value Intensity"; MFX_GRADEVALPOW="Value Gamma"; +MFX_LUTGRADE="LUT Grading"; +MFX_LUTTEX="LUT Index"; +MFX_LUTBLEND="Blend Factor"; +MFX_TECHNICOLOR="Technicolor"; +MFX_TECHBLEND="Blend Factor"; MFX_CMAT="Color Matrix"; MFX_CMAT_RR="Red→Red"; MFX_CMAT_RG="Red→Green"; @@ -144,7 +165,7 @@ MFX_BSS="BlurSharpShift"; MFX_BSS_1="(Some pretentious schmucks"; MFX_BSS_2="claim this \"enhances\" the visuals)"; MFX_BSSBLURENABLE="Blur Enable"; -MFX_BSSBLURRADIUS="BlurRadius"; +MFX_BSSBLURRADIUS="Blur Radius"; MFX_BSSSHARPENABLE="Sharp Enable"; MFX_BSSSHARPRADIUS="Sharp Radius"; MFX_BSSSHARPAMOUNT="Sharp Amount"; @@ -177,3 +198,10 @@ MFX_PALNUM="Palette"; MFX_PALSAT="Saturation"; MFX_PALPOW="Gamma"; MFX_PALDITHER="Dithering"; +MFX_PRESETNUM="Preset Slot"; +MFX_PRESETNAME="Preset Name"; +MFX_LOADPRESET="Load Preset"; +MFX_SAVEPRESET="Save Preset"; +MFX_PRESETEMPTY="MariFX Preset #%d is empty."; +MFX_PRESETLOADED="MariFX Preset #%d (%s) Loaded."; +MFX_PRESETSAVED="MariFX Preset #%d (%s) Saved."; diff --git a/menudef.txt b/menudef.txt index 7781f6a..ac8cbc5 100644 --- a/menudef.txt +++ b/menudef.txt @@ -104,17 +104,41 @@ OptionValue "MFXPalette" 63, "$MFX_PALETTE64" } +OptionValue "MFXLUT" +{ + 0, "$MFX_LUT1" + 1, "$MFX_LUT2" + 2, "$MFX_LUT3" + 3, "$MFX_LUT4" + 4, "$MFX_LUT5" + 5, "$MFX_LUT6" + 6, "$MFX_LUT7" + 7, "$MFX_LUT8" + 8, "$MFX_LUT9" + 9, "$MFX_LUT10" + 10, "$MFX_LUT11" + 11, "$MFX_LUT12" + 12, "$MFX_LUT13" + 13, "$MFX_LUT14" + 14, "$MFX_LUT15" + 15, "$MFX_LUT16" +} + OptionMenu "MFXOptionsMenu" { Class MFXOptionMenu Title "$MFX_TITLE" + MFXPresetList "$MFX_PRESETNUM", "mfx_presetslot" + TextField "$MFX_PRESETNAME", "mfx_presetname" + SafeCommand "$MFX_LOADPRESET", "event loadmfxpreset" + SafeCommand "$MFX_SAVEPRESET", "event savemfxpreset" StaticText " " StaticText "$MFX_LUMASHARPEN", "Gold" StaticText " " Option "$MFX_ENABLE", "mfx_lsharpenable", "YesNo" MFXSlider "$MFX_LSHARPRADIUS", "mfx_lsharpradius", 0, 1, 0.01, 2 MFXSlider "$MFX_LSHARPTRESHOLD", "mfx_lsharpclamp", 0, 1, 0.01, 2 - MFXSlider "$MFX_LSHARPSTRENGTH", "mfx_lsharpblend", 0, 10, 0.1, 1 + MFXSlider "$MFX_LSHARPSTRENGTH", "mfx_lsharpblend", 0, 10, 0.01, 2 SafeCommand "$MFX_RESET", "event resetmfxvars 8" StaticText " " StaticText "$MFX_GRAIN", "Gold" @@ -130,7 +154,7 @@ OptionMenu "MFXOptionsMenu" StaticText "$MFX_DIRT", "Gold" StaticText " " Option "$MFX_ENABLE", "mfx_dirtenable", "YesNo" - MFXSlider "$MFX_DIRTMC", "mfx_dirtmc", 1, 8, 1, 0 + MFXSlider "$MFX_DIRTMC", "mfx_dirtmc", 1, 8, 0.01, 2 MFXSlider "$MFX_DIRTCFACTOR", "mfx_dirtcfactor", 0, 1, 0.01, 2 SafeCommand "$MFX_RESET", "event resetmfxvars 1" StaticText " " @@ -153,6 +177,19 @@ OptionMenu "MFXOptionsMenu" MFXSlider "$MFX_GRADEVALPOW", "mfx_gradevalpow", 0, 2, 0.01, 2 SafeCommand "$MFX_RESET", "event resetmfxvars 2" StaticText " " + StaticText "$MFX_LUTGRADE", "Gold" + StaticText " " + Option "$MFX_ENABLE", "mfx_lutenable", "YesNo" + Option "$MFX_LUTTEX", "mfx_lutindex", "MFXLUT" + MFXSlider "$MFX_LUTBLEND", "mfx_lutblend", 0, 1, 0.01, 2 + SafeCommand "$MFX_RESET", "event resetmfxvars 9" + StaticText " " + StaticText "$MFX_TECHNICOLOR", "Gold" + StaticText " " + Option "$MFX_ENABLE", "mfx_techenable", "YesNo" + MFXSlider "$MFX_TECHBLEND", "mfx_techblend", 0, 1, 0.01, 2 + SafeCommand "$MFX_RESET", "event resetmfxvars 10" + StaticText " " StaticText "$MFX_CMAT", "Gold" StaticText " " Option "$MFX_ENABLE", "mfx_cmatenable", "YesNo" @@ -200,10 +237,10 @@ OptionMenu "MFXOptionsMenu" StaticText "$MFX_BSS_2", "Brown" StaticText " " Option "$MFX_BSSBLURENABLE", "mfx_bssblurenable", "YesNo" - MFXSlider "$MFX_BSSBLURRADIUS", "mfx_bssblurradius", 0, 1, 0.05, 2 + MFXSlider "$MFX_BSSBLURRADIUS", "mfx_bssblurradius", 0, 1, 0.01, 2 Option "$MFX_BSSSHARPENABLE", "mfx_bsssharpenable", "YesNo" - MFXSlider "$MFX_BSSSHARPRADIUS", "mfx_bsssharpradius", 0, 1, 0.05, 2 - MFXSlider "$MFX_BSSSHARPAMOUNT", "mfx_bsssharpamount", 0, 8, 0.1, 1 + MFXSlider "$MFX_BSSSHARPRADIUS", "mfx_bsssharpradius", 0, 1, 0.01, 2 + MFXSlider "$MFX_BSSSHARPAMOUNT", "mfx_bsssharpamount", 0, 8, 0.01, 2 Option "$MFX_BSSSHIFTENABLE", "mfx_bssshiftenable", "YesNo" MFXSlider "$MFX_BSSSHIFTRADIUS", "mfx_bssshiftradius", 0, 1, 0.05, 2 SafeCommand "$MFX_RESET", "event resetmfxvars 5" diff --git a/shaders/glsl/mfx_lutgrading.fp b/shaders/glsl/mfx_lutgrading.fp new file mode 100644 index 0000000..28b166e --- /dev/null +++ b/shaders/glsl/mfx_lutgrading.fp @@ -0,0 +1,20 @@ +/* + LUT color grading from MariENB + (C)2012-2021 Marisa Kirisame +*/ + +void main() +{ + vec2 coord = TexCoord; + vec4 res = texture(InputTexture,coord); + vec3 lc = clamp(res.rgb,0.,63./64.); + vec2 lcoord = vec2((lc.r+lutindex)/16.,lc.g/64.)+vec2(1./2048,1./8192.); + double minb = floor(lc.b*64.)/64.; + double maxb = ceil(lc.b*64.)/64.; + double theta = fract(lc.b*64.); + vec3 luta = textureLod(LUTTexture,lcoord+vec2(0,minb),0.).rgb; + vec3 lutb = textureLod(LUTTexture,lcoord+vec2(0,maxb),0.).rgb; + vec3 lutm = mix(luta,lutb,vec3(theta)); // has to be vec3 for whatever reason + res.rgb = mix(res.rgb,lutm,lutblend); + FragColor = res; +} diff --git a/shaders/glsl/mfx_technicolor.fp b/shaders/glsl/mfx_technicolor.fp new file mode 100644 index 0000000..f264b91 --- /dev/null +++ b/shaders/glsl/mfx_technicolor.fp @@ -0,0 +1,16 @@ +/* + "Technicolor" filter from MariENB + (C)2012-2021 Marisa Kirisame +*/ +void main() +{ + vec2 coord = TexCoord; + vec4 res = texture(InputTexture,coord); + res.rgb = clamp(res.rgb,0.,1.); + float red = 1.-(res.r-(res.g+res.b)*.5); + float green = 1.-(res.g-(res.r+res.b)*.5); + float blue = 1.-(res.b-(res.r+res.g)*.5); + vec3 tint = vec3(green*blue,red*blue,red*green)*res.rgb; + res.rgb = mix(res.rgb,res.rgb+.5*(tint-res.rgb),techblend); + FragColor = res; +} diff --git a/textures/mfxlut.png b/textures/mfxlut.png new file mode 100644 index 0000000..de17e31 Binary files /dev/null and b/textures/mfxlut.png differ diff --git a/zscript.txt b/zscript.txt index 7f01d94..54f0004 100644 --- a/zscript.txt +++ b/zscript.txt @@ -1,4 +1,139 @@ -version "3.3" +version "4.7" + +// preset save functions +Class MFXPresetUtility +{ + static clearscope void SavePreset( int slot ) + { + let lmp = Wads.CheckNumForFullname("cvarinfo.marifx"); + String dat = Wads.ReadLump(lmp); + // fucking Windows + dat.Substitute("\r",""); + Array list, ln; + list.Clear(); + dat.Split(list,"\n"); + let dct = Dictionary.Create(); + bool dosave = false; + CVar v; + String pn = ""; + for ( int i=0; i 7 ) Selection = 0; + } + else return OptionMenuItem.MenuEvent(mkey,fromcontroller); + SetSelection(Selection); + Menu.MenuSound("menu/change"); + return true; + } +} // keyboard input snaps to increment // holding shift increments by ten steps @@ -21,7 +156,7 @@ Class OptionMenuItemMFXSlider : OptionMenuItemSlider } } -// passes shift presses to MFXSliders +// passes shift/alt presses to MFXSliders Class MFXOptionMenu : OptionMenu { override void Init( Menu parent, OptionMenuDescriptor desc ) @@ -42,6 +177,17 @@ Class MFXOptionMenu : OptionMenu } return Super.OnUIEvent(ev); } + + override void OnReturn() + { + Super.OnReturn(); + for ( int i=0; i