]> git.lizzy.rs Git - minetest.git/commitdiff
Remove workaround in itemdef.cpp to enable/disable/enable "enable_shaders" setting
authorCraig Robbins <kde.psych@gmail.com>
Wed, 11 Feb 2015 07:45:49 +0000 (17:45 +1000)
committerCraig Robbins <kde.psych@gmail.com>
Wed, 11 Feb 2015 07:45:49 +0000 (17:45 +1000)
* Increase performance (client)
* Avoid changing a global value to solve a local problem

src/client.cpp
src/client.h
src/itemdef.cpp
src/mapblock_mesh.cpp
src/mapblock_mesh.h
src/wieldmesh.cpp

index b13631f9507d1df0be01c2b5c02b37a0a13d831d..107e16f1487f377cb8d84051800e8cf31bfc4a6c 100644 (file)
@@ -283,6 +283,7 @@ Client::Client(
        }
 
        m_cache_smooth_lighting = g_settings->getBool("smooth_lighting");
+       m_cache_enable_shaders  = g_settings->getBool("enable_shaders");
 }
 
 void Client::Stop()
@@ -2681,7 +2682,7 @@ void Client::addUpdateMeshTask(v3s16 p, bool ack_to_server, bool urgent)
                Create a task to update the mesh of the block
        */
 
-       MeshMakeData *data = new MeshMakeData(this);
+       MeshMakeData *data = new MeshMakeData(this, m_cache_enable_shaders);
 
        {
                //TimeTaker timer("data fill");
index fd43361b11f68d9c65c22a2d87e45b52283055e8..93143009e2c6c9cd6963701662f2cb6d9053796e 100644 (file)
@@ -623,8 +623,9 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
        Database *localdb;
        Server *localserver;
 
-       // TODO: Add callback to update this when g_settings changes
+       // TODO: Add callback to update these when g_settings changes
        bool m_cache_smooth_lighting;
+       bool m_cache_enable_shaders;
 };
 
 #endif // !CLIENT_HEADER
index ac67c5b271994827502559cf0fc28543e4357674..d356b96c5379d4b2f68cb7becf2416853c40e060 100644 (file)
@@ -362,8 +362,6 @@ class CItemDefManager: public IWritableItemDefManager
 
                        scene::IMesh *node_mesh = NULL;
 
-                       bool reenable_shaders = false;
-
                        if (need_rtt_mesh || need_wield_mesh) {
                                u8 param1 = 0;
                                if (f.param_type == CPT_LIGHT)
@@ -372,11 +370,7 @@ class CItemDefManager: public IWritableItemDefManager
                                /*
                                        Make a mesh from the node
                                */
-                               if (g_settings->getBool("enable_shaders")) {
-                                       reenable_shaders = true;
-                                       g_settings->setBool("enable_shaders", false);
-                               }
-                               MeshMakeData mesh_make_data(gamedef);
+                               MeshMakeData mesh_make_data(gamedef, false);
                                u8 param2 = 0;
                                if (f.param_type_2 == CPT2_WALLMOUNTED)
                                        param2 = 1;
@@ -443,9 +437,6 @@ class CItemDefManager: public IWritableItemDefManager
 
                        if (node_mesh)
                                node_mesh->drop();
-
-                       if (reenable_shaders)
-                               g_settings->setBool("enable_shaders",true);
                }
 
                // Put in cache
index cf311acba1a54454eeaab7e904fd5897c2483bb3..b3a1a73d731661f8f16bf05064455ab95378e722 100644 (file)
@@ -42,7 +42,7 @@ static void applyFacesShading(video::SColor& color, float factor)
        MeshMakeData
 */
 
-MeshMakeData::MeshMakeData(IGameDef *gamedef):
+MeshMakeData::MeshMakeData(IGameDef *gamedef, bool use_shaders):
        m_vmanip(),
        m_blockpos(-1337,-1337,-1337),
        m_crack_pos_relative(-1337, -1337, -1337),
@@ -50,7 +50,8 @@ MeshMakeData::MeshMakeData(IGameDef *gamedef):
        m_smooth_lighting(false),
        m_show_hud(false),
        m_highlight_mesh_color(255, 255, 255, 255),
-       m_gamedef(gamedef)
+       m_gamedef(gamedef),
+       m_use_shaders(use_shaders)
 {}
 
 void MeshMakeData::fill(MapBlock *block)
@@ -1028,7 +1029,7 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
        m_last_daynight_ratio((u32) -1),
        m_daynight_diffs()
 {
-       m_enable_shaders = g_settings->getBool("enable_shaders");
+       m_enable_shaders = data->m_use_shaders;
        m_enable_highlighting = g_settings->getBool("enable_node_highlighting");
 
        // 4-21ms for MAP_BLOCKSIZE=16  (NOTE: probably outdated)
index be56d4c586a03e37ac20bcc7120f988073665b68..98af92c74c396e4019845182c2e2afed6bc96dff 100644 (file)
@@ -45,8 +45,9 @@ struct MeshMakeData
        video::SColor m_highlight_mesh_color;
 
        IGameDef *m_gamedef;
+       bool m_use_shaders;
 
-       MeshMakeData(IGameDef *gamedef);
+       MeshMakeData(IGameDef *gamedef, bool use_shaders);
 
        /*
                Copy central data directly from block, and other data from
index 4ddae36d485deda8569923edf40c8b1a054a68cd..7c16bddcbdb282af08ac465ab970c5f931013288 100644 (file)
@@ -340,7 +340,9 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
                } else if (f.drawtype == NDT_NORMAL || f.drawtype == NDT_ALLFACES) {
                        setCube(f.tiles, def.wield_scale, tsrc);
                } else {
-                       MeshMakeData mesh_make_data(gamedef);
+                       //// TODO: Change false in the following constructor args to
+                       //// appropriate value when shader is added for wield items (if applicable)
+                       MeshMakeData mesh_make_data(gamedef, false);
                        MapNode mesh_make_node(id, 255, 0);
                        mesh_make_data.fillSingleNode(&mesh_make_node);
                        MapBlockMesh mapblock_mesh(&mesh_make_data, v3s16(0, 0, 0));