aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars <larsh@apache.org>2020-10-18 16:38:51 -0700
committerlhofhansl <larsh@apache.org>2020-10-19 09:31:09 -0700
commitb826e3973065a0bb81269c8decb5a33073508164 (patch)
tree37e631b9b7403b07ebef0a1a113d39d7b30be07c /src
parentdb9eee2d80cc2a35bd133473d131f321dc4600c3 (diff)
downloadminetest-b826e3973065a0bb81269c8decb5a33073508164.tar.gz
minetest-b826e3973065a0bb81269c8decb5a33073508164.tar.bz2
minetest-b826e3973065a0bb81269c8decb5a33073508164.zip
Minor clientmap improvements.
- Avoid calculating isBlockInSight for blocks without meshes. - Add metric for how many blocks the client has currently loaded. - Make some variables constant.
Diffstat (limited to 'src')
-rw-r--r--src/client/clientmap.cpp36
-rw-r--r--src/mapsector.h1
2 files changed, 20 insertions, 17 deletions
diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp
index d372a8e46..c8561def6 100644
--- a/src/client/clientmap.cpp
+++ b/src/client/clientmap.cpp
@@ -122,14 +122,17 @@ void ClientMap::updateDrawList()
}
m_drawlist.clear();
- v3f camera_position = m_camera_position;
- v3f camera_direction = m_camera_direction;
+ const v3f camera_position = m_camera_position;
+ const v3f camera_direction = m_camera_direction;
+ const f32 camera_fov = m_camera_fov;
v3s16 cam_pos_nodes = floatToInt(camera_position, BS);
v3s16 p_blocks_min;
v3s16 p_blocks_max;
getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &p_blocks_max);
+ // Number of blocks currently loaded by the client
+ u32 blocks_loaded = 0;
// Number of blocks with mesh in rendering range
u32 blocks_in_range_with_mesh = 0;
// Number of blocks occlusion culled
@@ -154,6 +157,7 @@ void ClientMap::updateDrawList()
MapSector *sector = sector_it.second;
v2s16 sp = sector->getPos();
+ blocks_loaded += sector->size();
if (!m_control.range_all) {
if (sp.X < p_blocks_min.X || sp.X > p_blocks_max.X ||
sp.Y < p_blocks_min.Z || sp.Y > p_blocks_max.Z)
@@ -175,8 +179,12 @@ void ClientMap::updateDrawList()
if not seen on display
*/
- if (block->mesh)
+ if (block->mesh) {
block->mesh->updateCameraOffset(m_camera_offset);
+ } else {
+ // Ignore if mesh doesn't exist
+ continue;
+ }
float range = 100000 * BS;
if (!m_control.range_all)
@@ -184,14 +192,7 @@ void ClientMap::updateDrawList()
float d = 0.0;
if (!isBlockInSight(block->getPos(), camera_position,
- camera_direction, m_camera_fov, range, &d))
- continue;
-
-
- /*
- Ignore if mesh doesn't exist
- */
- if (!block->mesh)
+ camera_direction, camera_fov, range, &d))
continue;
blocks_in_range_with_mesh++;
@@ -222,6 +223,7 @@ void ClientMap::updateDrawList()
g_profiler->avg("MapBlock meshes in range [#]", blocks_in_range_with_mesh);
g_profiler->avg("MapBlocks occlusion culled [#]", blocks_occlusion_culled);
g_profiler->avg("MapBlocks drawn [#]", m_drawlist.size());
+ g_profiler->avg("MapBlocks loaded [#]", blocks_loaded);
}
struct MeshBufList
@@ -287,13 +289,13 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
/*
Get animation parameters
*/
- float animation_time = m_client->getAnimationTime();
- int crack = m_client->getCrackLevel();
- u32 daynight_ratio = m_client->getEnv().getDayNightRatio();
+ const float animation_time = m_client->getAnimationTime();
+ const int crack = m_client->getCrackLevel();
+ const u32 daynight_ratio = m_client->getEnv().getDayNightRatio();
- v3f camera_position = m_camera_position;
- v3f camera_direction = m_camera_direction;
- f32 camera_fov = m_camera_fov;
+ const v3f camera_position = m_camera_position;
+ const v3f camera_direction = m_camera_direction;
+ const f32 camera_fov = m_camera_fov;
/*
Get all blocks and draw all visible ones
diff --git a/src/mapsector.h b/src/mapsector.h
index dede364f6..ffd4cdd1d 100644
--- a/src/mapsector.h
+++ b/src/mapsector.h
@@ -62,6 +62,7 @@ public:
bool empty() const { return m_blocks.empty(); }
+ int size() const { return m_blocks.size(); }
protected:
// The pile of MapBlocks