mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-28 22:09:42 +00:00
Avoid allocating std::vector for a single element
This commit is contained in:
parent
ac891a5eb1
commit
7290ce81c0
3 changed files with 12 additions and 12 deletions
|
@ -165,12 +165,12 @@ namespace MWWorld
|
||||||
class TerrainPreloadItem : public SceneUtil::WorkItem
|
class TerrainPreloadItem : public SceneUtil::WorkItem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TerrainPreloadItem(const std::vector<osg::ref_ptr<Terrain::View>>& views, Terrain::World* world,
|
explicit TerrainPreloadItem(const std::vector<osg::ref_ptr<Terrain::View>>& views, Terrain::World* world,
|
||||||
const std::vector<PositionCellGrid>& preloadPositions)
|
std::span<const PositionCellGrid> preloadPositions)
|
||||||
: mAbort(false)
|
: mAbort(false)
|
||||||
, mTerrainViews(views)
|
, mTerrainViews(views)
|
||||||
, mWorld(world)
|
, mWorld(world)
|
||||||
, mPreloadPositions(preloadPositions)
|
, mPreloadPositions(preloadPositions.begin(), preloadPositions.end())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,10 +380,10 @@ namespace MWWorld
|
||||||
mTerrainPreloadItem->abort();
|
mTerrainPreloadItem->abort();
|
||||||
mTerrainPreloadItem->waitTillDone();
|
mTerrainPreloadItem->waitTillDone();
|
||||||
}
|
}
|
||||||
setTerrainPreloadPositions(std::vector<PositionCellGrid>());
|
setTerrainPreloadPositions({});
|
||||||
}
|
}
|
||||||
|
|
||||||
void CellPreloader::setTerrainPreloadPositions(const std::vector<PositionCellGrid>& positions)
|
void CellPreloader::setTerrainPreloadPositions(std::span<const PositionCellGrid> positions)
|
||||||
{
|
{
|
||||||
if (positions.empty())
|
if (positions.empty())
|
||||||
{
|
{
|
||||||
|
@ -404,7 +404,7 @@ namespace MWWorld
|
||||||
mTerrainViews.emplace_back(mTerrain->createView());
|
mTerrainViews.emplace_back(mTerrain->createView());
|
||||||
}
|
}
|
||||||
|
|
||||||
mTerrainPreloadPositions = positions;
|
mTerrainPreloadPositions.assign(positions.begin(), positions.end());
|
||||||
if (!positions.empty())
|
if (!positions.empty())
|
||||||
{
|
{
|
||||||
mTerrainPreloadItem = new TerrainPreloadItem(mTerrainViews, mTerrain, positions);
|
mTerrainPreloadItem = new TerrainPreloadItem(mTerrainViews, mTerrain, positions);
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <osg/ref_ptr>
|
#include <osg/ref_ptr>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <span>
|
||||||
|
|
||||||
namespace osg
|
namespace osg
|
||||||
{
|
{
|
||||||
|
@ -77,7 +78,7 @@ namespace MWWorld
|
||||||
|
|
||||||
void setWorkQueue(osg::ref_ptr<SceneUtil::WorkQueue> workQueue);
|
void setWorkQueue(osg::ref_ptr<SceneUtil::WorkQueue> workQueue);
|
||||||
|
|
||||||
void setTerrainPreloadPositions(const std::vector<PositionCellGrid>& positions);
|
void setTerrainPreloadPositions(std::span<const PositionCellGrid> positions);
|
||||||
|
|
||||||
void syncTerrainLoad(Loading::Listener& listener);
|
void syncTerrainLoad(Loading::Listener& listener);
|
||||||
void abortTerrainPreloadExcept(const PositionCellGrid* exceptPos);
|
void abortTerrainPreloadExcept(const PositionCellGrid* exceptPos);
|
||||||
|
|
|
@ -1232,10 +1232,9 @@ namespace MWWorld
|
||||||
void Scene::preloadTerrain(const osg::Vec3f& pos, ESM::RefId worldspace, bool sync)
|
void Scene::preloadTerrain(const osg::Vec3f& pos, ESM::RefId worldspace, bool sync)
|
||||||
{
|
{
|
||||||
ESM::ExteriorCellLocation cellPos = ESM::positionToExteriorCellLocation(pos.x(), pos.y(), worldspace);
|
ESM::ExteriorCellLocation cellPos = ESM::positionToExteriorCellLocation(pos.x(), pos.y(), worldspace);
|
||||||
std::vector<PositionCellGrid> vec;
|
const PositionCellGrid position{ pos, gridCenterToBounds({ cellPos.mX, cellPos.mY }) };
|
||||||
vec.emplace_back(pos, gridCenterToBounds({ cellPos.mX, cellPos.mY }));
|
mPreloader->abortTerrainPreloadExcept(&position);
|
||||||
mPreloader->abortTerrainPreloadExcept(vec.data());
|
mPreloader->setTerrainPreloadPositions(std::span(&position, 1));
|
||||||
mPreloader->setTerrainPreloadPositions(vec);
|
|
||||||
if (!sync)
|
if (!sync)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1249,7 +1248,7 @@ namespace MWWorld
|
||||||
|
|
||||||
void Scene::reloadTerrain()
|
void Scene::reloadTerrain()
|
||||||
{
|
{
|
||||||
mPreloader->setTerrainPreloadPositions(std::vector<PositionCellGrid>());
|
mPreloader->setTerrainPreloadPositions({});
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ListFastTravelDestinationsVisitor
|
struct ListFastTravelDestinationsVisitor
|
||||||
|
|
Loading…
Reference in a new issue