summaryrefslogtreecommitdiff
path: root/src/game.cpp
diff options
context:
space:
mode:
authorgregorycu <gregory.currie@gmail.com>2015-01-24 20:40:27 +1100
committerCraig Robbins <kde.psych@gmail.com>2015-01-25 15:23:37 +1000
commited7c9c4cb83da887a2a7f1b7f5fc1656057977e7 (patch)
tree62455be3c1be6a0d4040c770a37d8dcc82ad867b /src/game.cpp
parent2c4a5e18619a69159bcace8c03b4ea5642f46836 (diff)
downloadminetest-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.cpp23
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)