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.
This commit is contained in:
Lars 2020-10-18 16:38:51 -07:00 committed by lhofhansl
parent db9eee2d80
commit b826e39730
2 changed files with 20 additions and 17 deletions

@ -122,14 +122,17 @@ void ClientMap::updateDrawList()
} }
m_drawlist.clear(); m_drawlist.clear();
v3f camera_position = m_camera_position; const v3f camera_position = m_camera_position;
v3f camera_direction = m_camera_direction; const v3f camera_direction = m_camera_direction;
const f32 camera_fov = m_camera_fov;
v3s16 cam_pos_nodes = floatToInt(camera_position, BS); v3s16 cam_pos_nodes = floatToInt(camera_position, BS);
v3s16 p_blocks_min; v3s16 p_blocks_min;
v3s16 p_blocks_max; v3s16 p_blocks_max;
getBlocksInViewRange(cam_pos_nodes, &p_blocks_min, &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 // Number of blocks with mesh in rendering range
u32 blocks_in_range_with_mesh = 0; u32 blocks_in_range_with_mesh = 0;
// Number of blocks occlusion culled // Number of blocks occlusion culled
@ -154,6 +157,7 @@ void ClientMap::updateDrawList()
MapSector *sector = sector_it.second; MapSector *sector = sector_it.second;
v2s16 sp = sector->getPos(); v2s16 sp = sector->getPos();
blocks_loaded += sector->size();
if (!m_control.range_all) { if (!m_control.range_all) {
if (sp.X < p_blocks_min.X || sp.X > p_blocks_max.X || 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) 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 not seen on display
*/ */
if (block->mesh) if (block->mesh) {
block->mesh->updateCameraOffset(m_camera_offset); block->mesh->updateCameraOffset(m_camera_offset);
} else {
// Ignore if mesh doesn't exist
continue;
}
float range = 100000 * BS; float range = 100000 * BS;
if (!m_control.range_all) if (!m_control.range_all)
@ -184,14 +192,7 @@ void ClientMap::updateDrawList()
float d = 0.0; float d = 0.0;
if (!isBlockInSight(block->getPos(), camera_position, if (!isBlockInSight(block->getPos(), camera_position,
camera_direction, m_camera_fov, range, &d)) camera_direction, camera_fov, range, &d))
continue;
/*
Ignore if mesh doesn't exist
*/
if (!block->mesh)
continue; continue;
blocks_in_range_with_mesh++; 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("MapBlock meshes in range [#]", blocks_in_range_with_mesh);
g_profiler->avg("MapBlocks occlusion culled [#]", blocks_occlusion_culled); g_profiler->avg("MapBlocks occlusion culled [#]", blocks_occlusion_culled);
g_profiler->avg("MapBlocks drawn [#]", m_drawlist.size()); g_profiler->avg("MapBlocks drawn [#]", m_drawlist.size());
g_profiler->avg("MapBlocks loaded [#]", blocks_loaded);
} }
struct MeshBufList struct MeshBufList
@ -287,13 +289,13 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
/* /*
Get animation parameters Get animation parameters
*/ */
float animation_time = m_client->getAnimationTime(); const float animation_time = m_client->getAnimationTime();
int crack = m_client->getCrackLevel(); const int crack = m_client->getCrackLevel();
u32 daynight_ratio = m_client->getEnv().getDayNightRatio(); const u32 daynight_ratio = m_client->getEnv().getDayNightRatio();
v3f camera_position = m_camera_position; const v3f camera_position = m_camera_position;
v3f camera_direction = m_camera_direction; const v3f camera_direction = m_camera_direction;
f32 camera_fov = m_camera_fov; const f32 camera_fov = m_camera_fov;
/* /*
Get all blocks and draw all visible ones Get all blocks and draw all visible ones

@ -62,6 +62,7 @@ public:
bool empty() const { return m_blocks.empty(); } bool empty() const { return m_blocks.empty(); }
int size() const { return m_blocks.size(); }
protected: protected:
// The pile of MapBlocks // The pile of MapBlocks