diff options
author | gregorycu <gregory.currie@gmail.com> | 2015-01-24 20:40:27 +1100 |
---|---|---|
committer | Craig Robbins <kde.psych@gmail.com> | 2015-01-25 15:23:37 +1000 |
commit | ed7c9c4cb83da887a2a7f1b7f5fc1656057977e7 (patch) | |
tree | 62455be3c1be6a0d4040c770a37d8dcc82ad867b /src/game.cpp | |
parent | 2c4a5e18619a69159bcace8c03b4ea5642f46836 (diff) | |
download | minetest-ed7c9c4cb83da887a2a7f1b7f5fc1656057977e7.tar.gz minetest-ed7c9c4cb83da887a2a7f1b7f5fc1656057977e7.tar.bz2 minetest-ed7c9c4cb83da887a2a7f1b7f5fc1656057977e7.zip |
Settings fixes Make the GameGlobalShaderConstantSetter use the settings callback (8% perf improvement in game loop) Ensure variable is set Ensure settings callback is threadsafe
Diffstat (limited to 'src/game.cpp')
-rw-r--r-- | src/game.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/game.cpp b/src/game.cpp index ec025b73f..b496cf3bf 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -809,16 +809,35 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter bool *m_force_fog_off; f32 *m_fog_range; Client *m_client; + bool m_fogEnabled; public: + void onSettingsChange(const std::string &name) + { + if (name == "enable_fog") + m_fogEnabled = g_settings->getBool("enable_fog"); + } + + static void SettingsCallback(const std::string name, void *userdata) + { + reinterpret_cast<GameGlobalShaderConstantSetter*>(userdata)->onSettingsChange(name); + } + GameGlobalShaderConstantSetter(Sky *sky, bool *force_fog_off, f32 *fog_range, Client *client) : m_sky(sky), m_force_fog_off(force_fog_off), m_fog_range(fog_range), m_client(client) - {} - ~GameGlobalShaderConstantSetter() {} + { + g_settings->registerChangedCallback("enable_fog", SettingsCallback, this); + m_fogEnabled = g_settings->getBool("enable_fog"); + } + + ~GameGlobalShaderConstantSetter() + { + g_settings->deregisterChangedCallback("enable_fog", SettingsCallback, this); + } virtual void onSetConstants(video::IMaterialRendererServices *services, bool is_highlevel) |