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