No occlusion culling when free_move is on and camera is inside ground
authorPerttu Ahola <celeron55@gmail.com>
Wed, 28 Mar 2012 09:19:25 +0000 (12:19 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Wed, 28 Mar 2012 09:19:25 +0000 (12:19 +0300)
src/clientmap.cpp

index 23fe4418637915da0f4a01ad24736fe2aa65504e..3899041a9d5655fff1b4f7c6e3368cb06aa16429 100644 (file)
@@ -324,6 +324,16 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
                                Occlusion culling
                        */
 
+                       // No occlusion culling when free_move is on and camera is
+                       // inside ground
+                       bool occlusion_culling_enabled = true;
+                       if(g_settings->getBool("free_move")){
+                               MapNode n = getNodeNoEx(cam_pos_nodes);
+                               if(n.getContent() == CONTENT_IGNORE ||
+                                               nodemgr->get(n).solidness == 2)
+                                       occlusion_culling_enabled = false;
+                       }
+
                        v3s16 cpn = block->getPos() * MAP_BLOCKSIZE;
                        cpn += v3s16(MAP_BLOCKSIZE/2, MAP_BLOCKSIZE/2, MAP_BLOCKSIZE/2);
                        float step = BS*1;
@@ -334,6 +344,7 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
                        s16 bs2 = MAP_BLOCKSIZE/2 + 1;
                        u32 needed_count = 1;
                        if(
+                               occlusion_culling_enabled &&
                                isOccluded(this, spn, cpn + v3s16(0,0,0),
                                        step, stepfac, startoff, endoff, needed_count, nodemgr) &&
                                isOccluded(this, spn, cpn + v3s16(bs2,bs2,bs2),