소스 검색

Fix graphical artifacts on map scaling

Ivan Savenko 2 년 전
부모
커밋
1c82a10fdd
3개의 변경된 파일6개의 추가작업 그리고 4개의 파일을 삭제
  1. 4 2
      client/mapView/MapViewCache.cpp
  2. 1 0
      client/mapView/MapViewCache.h
  3. 1 2
      client/mapView/MapViewModel.cpp

+ 4 - 2
client/mapView/MapViewCache.cpp

@@ -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();
 }
 

+ 1 - 0
client/mapView/MapViewCache.h

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

+ 1 - 2
client/mapView/MapViewModel.cpp

@@ -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