mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-04-15 23:42:20 +00:00
Merge branch 'fix-exterior-regression' into 'master'
Fixes #7437 Closes #7388 and #7437 See merge request OpenMW/openmw!3187
This commit is contained in:
commit
2b11c2cf36
@ -577,7 +577,7 @@ namespace MWWorld
|
|||||||
if (mRendering.pagingUnlockCache())
|
if (mRendering.pagingUnlockCache())
|
||||||
mPreloader->abortTerrainPreloadExcept(nullptr);
|
mPreloader->abortTerrainPreloadExcept(nullptr);
|
||||||
if (!mPreloader->isTerrainLoaded(std::make_pair(pos, newGrid), mRendering.getReferenceTime()))
|
if (!mPreloader->isTerrainLoaded(std::make_pair(pos, newGrid), mRendering.getReferenceTime()))
|
||||||
preloadTerrain(pos, true);
|
preloadTerrain(pos, playerCellIndex.mWorldspace, true);
|
||||||
mPagedRefs.clear();
|
mPagedRefs.clear();
|
||||||
mRendering.getPagedRefnums(newGrid, mPagedRefs);
|
mRendering.getPagedRefnums(newGrid, mPagedRefs);
|
||||||
|
|
||||||
@ -1205,10 +1205,11 @@ namespace MWWorld
|
|||||||
mPreloader->preload(cell, mRendering.getReferenceTime());
|
mPreloader->preload(cell, mRendering.getReferenceTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scene::preloadTerrain(const osg::Vec3f& pos, bool sync)
|
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;
|
std::vector<PositionCellGrid> vec;
|
||||||
vec.emplace_back(pos, gridCenterToBounds(getNewGridCenter(pos)));
|
vec.emplace_back(pos, gridCenterToBounds({ cellPos.mX, cellPos.mY }));
|
||||||
mPreloader->abortTerrainPreloadExcept(vec.data());
|
mPreloader->abortTerrainPreloadExcept(vec.data());
|
||||||
mPreloader->setTerrainPreloadPositions(vec);
|
mPreloader->setTerrainPreloadPositions(vec);
|
||||||
if (!sync)
|
if (!sync)
|
||||||
|
@ -145,7 +145,7 @@ namespace MWWorld
|
|||||||
~Scene();
|
~Scene();
|
||||||
|
|
||||||
void preloadCell(MWWorld::CellStore& cell, bool preloadSurrounding = false);
|
void preloadCell(MWWorld::CellStore& cell, bool preloadSurrounding = false);
|
||||||
void preloadTerrain(const osg::Vec3f& pos, bool sync = false);
|
void preloadTerrain(const osg::Vec3f& pos, ESM::RefId worldspace, bool sync = false);
|
||||||
void reloadTerrain();
|
void reloadTerrain();
|
||||||
|
|
||||||
void playerMoved(const osg::Vec3f& pos);
|
void playerMoved(const osg::Vec3f& pos);
|
||||||
|
@ -513,7 +513,8 @@ namespace MWWorld
|
|||||||
if (getPlayerPtr().isInCell())
|
if (getPlayerPtr().isInCell())
|
||||||
{
|
{
|
||||||
if (getPlayerPtr().getCell()->isExterior())
|
if (getPlayerPtr().getCell()->isExterior())
|
||||||
mWorldScene->preloadTerrain(getPlayerPtr().getRefData().getPosition().asVec3());
|
mWorldScene->preloadTerrain(getPlayerPtr().getRefData().getPosition().asVec3(),
|
||||||
|
getPlayerPtr().getCell()->getCell()->getWorldSpace());
|
||||||
mWorldScene->preloadCell(*getPlayerPtr().getCell(), true);
|
mWorldScene->preloadCell(*getPlayerPtr().getCell(), true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user