diff --git a/config.cpp b/config.cpp index b8ab1118..e47df9b6 100644 --- a/config.cpp +++ b/config.cpp @@ -492,6 +492,8 @@ EX const char *conffile = "hyperrogue.ini"; /* extra space if more geometries are added */ EX array sightranges; +EX bool logfog; + EX videopar vid; #define DEFAULT_WALLMODE (ISMOBILE ? 3 : 5) @@ -774,6 +776,8 @@ EX void initConfig() { param_b(vid.darkhepta, "mark heptagons", false); + param_b(logfog, "logfog", false); + for(auto& lp: linepatterns::patterns) { addsaver(lp->color, "lpcolor-" + lp->lpname); addsaver(lp->multiplier, "lpwidth-" + lp->lpname); diff --git a/shaders.cpp b/shaders.cpp index 31a4d286..5a384773 100644 --- a/shaders.cpp +++ b/shaders.cpp @@ -402,7 +402,10 @@ shared_ptr write_shader(flagtype shader_flags) { } else if(distfun != "") { have_vfogs = true; - vmain += "vFogs = (uFogBase - " + distfun + " / uFog);\n"; + if(logfog) + vmain += "vFogs = uFogBase * exp(- " + distfun + " / uFog);\n"; + else + vmain += "vFogs = clamp(uFogBase - " + distfun + " / uFog, 0.0, 1.0);\n"; vsh += "uniform mediump float uFog;\n" "uniform mediump float uFogBase;\n";