diff --git a/src/Include/xrRender/ObjectSpaceRender.h b/src/Include/xrRender/ObjectSpaceRender.h index 21ac6e03544..eda556723e1 100644 --- a/src/Include/xrRender/ObjectSpaceRender.h +++ b/src/Include/xrRender/ObjectSpaceRender.h @@ -13,6 +13,7 @@ class IObjectSpaceRender virtual void dbgRender() = 0; virtual void dbgAddSphere(const Fsphere& sphere, u32 colour) = 0; + virtual void dbgReserveSphere(size_t count) = 0; virtual void SetShader() = 0; }; #endif // DEBUG diff --git a/src/Layers/xrRender/DetailManager.cpp b/src/Layers/xrRender/DetailManager.cpp index 95f79e0ef5d..b1489dfaef5 100644 --- a/src/Layers/xrRender/DetailManager.cpp +++ b/src/Layers/xrRender/DetailManager.cpp @@ -169,6 +169,7 @@ void CDetailManager::Load() dtFS->r_chunk_safe(0, &dtH, sizeof(dtH)); R_ASSERT(dtH.version() == DETAIL_VERSION); u32 m_count = dtH.object_count(); + objects.reserve(m_count); // Models IReader* m_fs = dtFS->open_chunk(1); diff --git a/src/Layers/xrRender/ResourceManager_Loader.cpp b/src/Layers/xrRender/ResourceManager_Loader.cpp index f7eed5c5947..1dbecaf4387 100644 --- a/src/Layers/xrRender/ResourceManager_Loader.cpp +++ b/src/Layers/xrRender/ResourceManager_Loader.cpp @@ -149,12 +149,10 @@ void CResourceManager::StoreNecessaryTextures() if (!m_necessary.empty()) return; - auto it = m_textures.begin(); - auto it_e = m_textures.end(); - - for (; it != it_e; ++it) + m_necessary.reserve(m_textures.size()); + for (auto& mtex : m_textures) { - LPCSTR texture_name = it->first; + LPCSTR texture_name = mtex.first; if (strstr(texture_name, DELIMITER "levels" DELIMITER)) continue; if (!strchr(texture_name, _DELIMITER)) diff --git a/src/Layers/xrRender/dxObjectSpaceRender.cpp b/src/Layers/xrRender/dxObjectSpaceRender.cpp index 29813aa4021..82849b97b59 100644 --- a/src/Layers/xrRender/dxObjectSpaceRender.cpp +++ b/src/Layers/xrRender/dxObjectSpaceRender.cpp @@ -8,6 +8,7 @@ dxObjectSpaceRender::dxObjectSpaceRender() { m_shDebug.create("debug" DELIMITER dxObjectSpaceRender::~dxObjectSpaceRender() { m_shDebug.destroy(); } void dxObjectSpaceRender::Copy(IObjectSpaceRender& _in) { *this = *(dxObjectSpaceRender*)&_in; } void dxObjectSpaceRender::dbgAddSphere(const Fsphere& sphere, u32 colour) { dbg_S.emplace_back(sphere, colour); } +void dxObjectSpaceRender::dbgReserveSphere(size_t count) { dbg_S.reserve(count); } void dxObjectSpaceRender::dbgRender() { R_ASSERT(bDebug); diff --git a/src/Layers/xrRender/dxObjectSpaceRender.h b/src/Layers/xrRender/dxObjectSpaceRender.h index 20a814ff176..f893372f4ab 100644 --- a/src/Layers/xrRender/dxObjectSpaceRender.h +++ b/src/Layers/xrRender/dxObjectSpaceRender.h @@ -15,6 +15,7 @@ class dxObjectSpaceRender : public IObjectSpaceRender virtual void dbgRender(); virtual void dbgAddSphere(const Fsphere& sphere, u32 colour); + virtual void dbgReserveSphere(size_t count); virtual void SetShader(); private: diff --git a/src/xrCDB/xr_area_raypick.cpp b/src/xrCDB/xr_area_raypick.cpp index 5763abc2bae..2e74486fa42 100644 --- a/src/xrCDB/xr_area_raypick.cpp +++ b/src/xrCDB/xr_area_raypick.cpp @@ -134,7 +134,11 @@ bool CObjectSpace::_RayPick( STYPE_COLLIDEABLE | ((tgt & rqtObstacle) ? STYPE_OBSTACLE : 0) | ((tgt & rqtShape) ? STYPE_SHAPE : 0); g_SpatialSpace->q_ray(r_spatial, 0, d_flags, start, dir, range); // Determine visibility for dynamic part of scene - for (auto spatial : r_spatial) +#ifdef DEBUG + if (bDebug()) + (*m_pRender)->dbgReserveSphere(r_spatial.size()); +#endif + for (auto* spatial : r_spatial) { IGameObject* collidable = spatial->dcast_GameObject(); if (0 == collidable)