]> git.lizzy.rs Git - minetest.git/blobdiff - src/client/game.cpp
Improve bloom effect (#12916)
[minetest.git] / src / client / game.cpp
index 5eb185f86c016df3d93e1518d6818df6463f8621..2f97b9b0c1e55643f07f7f27ddd5d4a730bf7d93 100644 (file)
@@ -432,6 +432,8 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
        bool m_bloom_enabled;
        CachedPixelShaderSetting<float> m_bloom_intensity_pixel;
        float m_bloom_intensity;
+       CachedPixelShaderSetting<float> m_bloom_strength_pixel;
+       float m_bloom_strength;
        CachedPixelShaderSetting<float> m_bloom_radius_pixel;
        float m_bloom_radius;
 
@@ -444,8 +446,10 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
                        m_user_exposure_factor = g_settings->getFloat("exposure_factor", 0.1f, 10.0f);
                if (name == "bloom_intensity")
                        m_bloom_intensity = g_settings->getFloat("bloom_intensity", 0.01f, 1.0f);
+               if (name == "bloom_strength_factor")
+                       m_bloom_strength = RenderingEngine::BASE_BLOOM_STRENGTH * g_settings->getFloat("bloom_strength_factor", 0.1f, 10.0f);
                if (name == "bloom_radius")
-                       m_bloom_radius = g_settings->getFloat("bloom_radius", 1.0f, 64.0f);
+                       m_bloom_radius = g_settings->getFloat("bloom_radius", 0.1f, 8.0f);
        }
 
        static void settingsCallback(const std::string &name, void *userdata)
@@ -479,17 +483,20 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
                m_texel_size0("texelSize0"),
                m_exposure_factor_pixel("exposureFactor"),
                m_bloom_intensity_pixel("bloomIntensity"),
+               m_bloom_strength_pixel("bloomStrength"),
                m_bloom_radius_pixel("bloomRadius")
        {
                g_settings->registerChangedCallback("enable_fog", settingsCallback, this);
                g_settings->registerChangedCallback("exposure_factor", settingsCallback, this);
                g_settings->registerChangedCallback("bloom_intensity", settingsCallback, this);
+               g_settings->registerChangedCallback("bloom_strength_factor", settingsCallback, this);
                g_settings->registerChangedCallback("bloom_radius", settingsCallback, this);
                m_fog_enabled = g_settings->getBool("enable_fog");
                m_user_exposure_factor = g_settings->getFloat("exposure_factor", 0.1f, 10.0f);
                m_bloom_enabled = g_settings->getBool("enable_bloom");
                m_bloom_intensity = g_settings->getFloat("bloom_intensity", 0.01f, 1.0f);
-               m_bloom_radius = g_settings->getFloat("bloom_radius", 1.0f, 64.0f);
+               m_bloom_strength = RenderingEngine::BASE_BLOOM_STRENGTH * g_settings->getFloat("bloom_strength_factor", 0.1f, 10.0f);
+               m_bloom_radius = g_settings->getFloat("bloom_radius", 0.1f, 8.0f);
        }
 
        ~GameGlobalShaderConstantSetter()
@@ -567,14 +574,15 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
 
                m_texel_size0.set(m_texel_size0_values.data(), services);
 
-               float exposure_factor = RenderingEngine::DEFAULT_EXPOSURE_FACTOR * m_user_exposure_factor;
+               float exposure_factor = m_user_exposure_factor;
                if (std::isnan(exposure_factor))
-                       exposure_factor = RenderingEngine::DEFAULT_EXPOSURE_FACTOR;
+                       exposure_factor = 1.0f;
                m_exposure_factor_pixel.set(&exposure_factor, services);
 
                if (m_bloom_enabled) {
                        m_bloom_intensity_pixel.set(&m_bloom_intensity, services);
                        m_bloom_radius_pixel.set(&m_bloom_radius, services);
+                       m_bloom_strength_pixel.set(&m_bloom_strength, services);
                }
        }