From f8fa5a8dd998ddb83700350d69c22d2b1ffa59f7 Mon Sep 17 00:00:00 2001 From: Turky Mohammed Date: Tue, 18 Feb 2025 17:45:54 +0300 Subject: [PATCH] Fix tilemap culling (#2403) * Fix tilemap culling having twice the width and height * revert changes to old one * remove unneeded debug crumps [skip ci] * fix TMX culling final remove a pesky content scale factor multiplication --- core/2d/FastTMXLayer.cpp | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/core/2d/FastTMXLayer.cpp b/core/2d/FastTMXLayer.cpp index b96eddd8d2a6..77105f2623b9 100644 --- a/core/2d/FastTMXLayer.cpp +++ b/core/2d/FastTMXLayer.cpp @@ -135,21 +135,17 @@ void FastTMXLayer::draw(Renderer* renderer, const Mat4& transform, uint32_t flag updateTotalQuads(); auto cam = Camera::getVisitingCamera(); - if (flags != 0 || _dirty || _quadsDirty || !_cameraPositionDirty.fuzzyEquals(cam->getPosition(), _tileSet->_tileSize.x) || + if (flags != 0 || _dirty || _quadsDirty || + !_cameraPositionDirty.fuzzyEquals(cam->getPosition(), _tileSet->_tileSize.x) || _cameraZoomDirty != cam->getZoom()) { _cameraPositionDirty = cam->getPosition(); - auto zoom = _cameraZoomDirty = cam->getZoom(); - Vec2 s = _director->getVisibleSize(); - const Vec2& anchor = getAnchorPoint(); - auto rect = Rect(cam->getPositionX() - s.width * zoom * (anchor.x == 0.0f ? 0.5f : anchor.x), - cam->getPositionY() - s.height * zoom * (anchor.y == 0.0f ? 0.5f : anchor.y), - s.width * zoom, s.height * zoom); - - rect.origin.x -= _tileSet->_tileSize.x; - rect.origin.y -= _tileSet->_tileSize.y; - rect.size.x += s.x * zoom / 2 + _tileSet->_tileSize.x * zoom; - rect.size.y += s.y * zoom / 2 + _tileSet->_tileSize.y * zoom; + auto zoom = _cameraZoomDirty = cam->getZoom(); + Vec2 s = _director->getVisibleSize(); + const Vec2& anchor = getAnchorPoint(); + auto rect = Rect(cam->getPositionX() - s.width * zoom * (anchor.x == 0.0f ? 0.5f : anchor.x), + cam->getPositionY() - s.height * zoom * (anchor.y == 0.0f ? 0.5f : anchor.y), s.width * zoom, + s.height * zoom); Mat4 inv = transform; inv.inverse(); @@ -177,7 +173,7 @@ void FastTMXLayer::draw(Renderer* renderer, const Mat4& transform, uint32_t flag void FastTMXLayer::updateTiles(const Rect& culledRect) { - Rect visibleTiles = Rect(culledRect.origin, culledRect.size * _director->getContentScaleFactor()); + Rect visibleTiles = Rect(culledRect.origin, culledRect.size); Vec2 mapTileSize = AX_SIZE_PIXELS_TO_POINTS(_mapTileSize); Vec2 tileSize = AX_SIZE_PIXELS_TO_POINTS(_tileSet->_tileSize); Mat4 nodeToTileTransform = _tileToNodeTransform.getInversed();