1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-21 07:53:53 +00:00

Fixes #275: force updating exterior cell maps even if already in cache

This commit is contained in:
scrawl 2014-05-11 15:36:31 +02:00
parent 54a893994a
commit 2bc2684a66
3 changed files with 14 additions and 3 deletions

View file

@ -168,7 +168,10 @@ void LocalMap::requestMap(MWWorld::CellStore* cell, float zMin, float zMax)
mCameraPosNode->setPosition(Vector3(0,0,0));
render((x+0.5)*sSize, (y+0.5)*sSize, zMin, zMax, sSize, sSize, name);
// Note: using force=true for exterior cell maps.
// They must be updated even if they were visited before, because the set of surrounding active cells might be different
// (and objects in a different cell can "bleed" into another cell's map if they cross the border)
render((x+0.5)*sSize, (y+0.5)*sSize, zMin, zMax, sSize, sSize, name, true);
if (mBuffers.find(name) == mBuffers.end())
{
@ -371,7 +374,7 @@ void LocalMap::loadFogOfWar (const std::string& texturePrefix, ESM::FogTexture&
void LocalMap::render(const float x, const float y,
const float zlow, const float zhigh,
const float xw, const float yw, const std::string& texture)
const float xw, const float yw, const std::string& texture, bool force)
{
mCellCamera->setFarClipDistance( (zhigh-zlow) + 2000 );
mCellCamera->setNearClipDistance(50);
@ -410,6 +413,11 @@ void LocalMap::render(const float x, const float y,
PF_R8G8B8);
tex->getBuffer()->blit(mRenderTexture->getBuffer());
}
else if (force)
{
mRenderTarget->update();
tex->getBuffer()->blit(mRenderTexture->getBuffer());
}
mRenderingManager->enableLights(true);
mLight->setVisible(false);

View file

@ -106,10 +106,11 @@ namespace MWRender
float mAngle;
const Ogre::Vector2 rotatePoint(const Ogre::Vector2& p, const Ogre::Vector2& c, const float angle);
/// @param force Always render, even if we already have a cached map
void render(const float x, const float y,
const float zlow, const float zhigh,
const float xw, const float yw,
const std::string& texture);
const std::string& texture, bool force=false);
// Creates a fog of war texture and initializes it to full black
void createFogOfWar(const std::string& texturePrefix);

View file

@ -89,6 +89,8 @@ namespace MWWorld
{
if (mNeedMapUpdate)
{
// Note: exterior cell maps must be updated, even if they were visited before, because the set of surrounding cells might be different
// (and objects in a different cell can "bleed" into another cells map if they cross the border)
for (CellStoreCollection::iterator active = mActiveCells.begin(); active!=mActiveCells.end(); ++active)
mRendering.requestMap(*active);
mNeedMapUpdate = false;