summaryrefslogtreecommitdiff
path: root/src/map.h
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <bjorn@lindeijer.nl>2024-10-11 15:35:15 +0200
committerThorbjørn Lindeijer <bjorn@lindeijer.nl>2025-05-08 14:03:08 +0000
commitda60ed7ed07c2b96f3231a0476014dbbf186843e (patch)
tree17882266cd1abdc64dc78bc7b7724767dc314312 /src/map.h
parent3f630c76de06a0cbda163342b5ae0bf166aaad9f (diff)
downloadmana-optimize-actor-draw.tar.gz
mana-optimize-actor-draw.tar.bz2
mana-optimize-actor-draw.tar.xz
mana-optimize-actor-draw.zip
Only sort and render visible actorsoptimize-actor-draw
Speeds up rendering a lot in case of many offscreen actors, for example when a heavy particle effect is running somewhere.
Diffstat (limited to 'src/map.h')
-rw-r--r--src/map.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/map.h b/src/map.h
index f3850722..06c593e1 100644
--- a/src/map.h
+++ b/src/map.h
@@ -74,6 +74,15 @@ class TileAnimation
};
/**
+ * Small struct to reference visible actors and their draw order.
+ */
+struct FringeActor
+{
+ int drawOrder;
+ Actor *actor;
+};
+
+/**
* A map layer. Stores a grid of tiles and their offset, and implements layer
* rendering.
*/
@@ -120,7 +129,7 @@ class MapLayer
int startX, int startY,
int endX, int endY,
int scrollX, int scrollY,
- const Actors &actors,
+ const std::vector<FringeActor> &actors,
int debugFlags) const;
bool isFringeLayer() const
@@ -418,5 +427,8 @@ class Map : public Properties
std::map<int, TileAnimation> mTileAnimations;
+ // Array of visible actors, reused to reduce allocations
+ std::vector<FringeActor> mVisibleActors;
+
int mMask = 1;
};