1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-28 08:48:48 +02:00

Fix graphical artifacts on map scaling

This commit is contained in:
Ivan Savenko 2023-05-19 17:09:46 +03:00
parent 872b68c59a
commit 1c82a10fdd
3 changed files with 6 additions and 4 deletions

View File

@ -108,8 +108,9 @@ void MapViewCache::updateTile(const std::shared_ptr<IMapRendererContext> & conte
void MapViewCache::update(const std::shared_ptr<IMapRendererContext> & context)
{
Rect dimensions = model->getTilesTotalRect();
bool mapResized = cachedSize != model->getSingleTileSize();
if(dimensions.w != terrainChecksum.shape()[0] || dimensions.h != terrainChecksum.shape()[1])
if(mapResized || dimensions.w != terrainChecksum.shape()[0] || dimensions.h != terrainChecksum.shape()[1])
{
boost::multi_array<TileChecksum, 2> newCache;
newCache.resize(boost::extents[dimensions.w][dimensions.h]);
@ -117,7 +118,7 @@ void MapViewCache::update(const std::shared_ptr<IMapRendererContext> & context)
terrainChecksum = newCache;
}
if(dimensions.w != tilesUpToDate.shape()[0] || dimensions.h != tilesUpToDate.shape()[1])
if(mapResized || dimensions.w != tilesUpToDate.shape()[0] || dimensions.h != tilesUpToDate.shape()[1])
{
boost::multi_array<bool, 2> newCache;
newCache.resize(boost::extents[dimensions.w][dimensions.h]);
@ -129,6 +130,7 @@ void MapViewCache::update(const std::shared_ptr<IMapRendererContext> & context)
for(int x = dimensions.left(); x < dimensions.right(); ++x)
updateTile(context, {x, y, model->getLevel()});
cachedSize = model->getSingleTileSize();
cachedLevel = model->getLevel();
}

View File

@ -41,6 +41,7 @@ class MapViewCache
boost::multi_array<TileChecksum, 2> terrainChecksum;
boost::multi_array<bool, 2> tilesUpToDate;
Point cachedSize;
Point cachedPosition;
int cachedLevel;

View File

@ -36,8 +36,7 @@ void MapViewModel::setLevel(int newLevel)
Point MapViewModel::getSingleTileSizeUpperLimit() const
{
// arbitrary-seleted upscaling limit
// TODO: figure out reason behind graphical artifacts on scaling higher than 120px (375%)
return Point(120, 120);
return Point(256, 256);
}
Point MapViewModel::getSingleTileSizeLowerLimit() const