Skip to content

Commit eb057c1

Browse files
committed
Fixed SkiaSharp interop efficiency. Less heap allocations.
1 parent 6adeb8a commit eb057c1

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/plugins/OpenMLTD.MilliSim.Extension.Components.ScoreComponents/Overlays/AvatarDisplay.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,21 @@ protected override void OnLoadContents() {
168168
_avatarImages = avatarImages;
169169
_avatarRectangles = rects;
170170

171+
var avatarImagesData = new byte[avatarImages.Length][];
172+
173+
for (var i = 0; i < avatarImages.Length; ++i) {
174+
if (avatarImages[i] == null) {
175+
continue;
176+
}
177+
178+
var data = new byte[avatarImages[i].Width * avatarImages[i].Height * sizeof(int)];
179+
avatarImages[i].GetData(data);
180+
181+
avatarImagesData[i] = data;
182+
}
183+
184+
_avatarImagesData = avatarImagesData;
185+
171186
var scalingResponder = theaterDays.FindSingleElement<MltdStageScalingResponder>();
172187

173188
if (scalingResponder == null) {
@@ -214,6 +229,7 @@ private void DrawContents() {
214229
graphics.SetClipPath(clipPath, false);
215230

216231
var avatarImages = _avatarImages;
232+
var avatarImagesData = _avatarImagesData;
217233

218234
for (var i = 0; i < avatarImages.Length; ++i) {
219235
var image = avatarImages[i];
@@ -222,9 +238,13 @@ private void DrawContents() {
222238
continue;
223239
}
224240

241+
var imageData = avatarImagesData[i];
242+
243+
Debug.Assert(imageData != null, nameof(imageData) + "!= null");
244+
225245
var rect = avatarRectangles[i];
226246

227-
graphics.DrawImage(image, rect);
247+
graphics.DrawImage(imageData, image.Format, image.Width, image.Height, rect.X, rect.Y, rect.Width, rect.Height);
228248
}
229249

230250
graphics.RestoreState();
@@ -241,6 +261,9 @@ private void DrawContents() {
241261
[ItemCanBeNull]
242262
private Texture2D[] _avatarImages;
243263

264+
[ItemCanBeNull]
265+
private byte[][] _avatarImagesData;
266+
244267
private OngoingAnimation _ongoingAnimation = OngoingAnimation.None;
245268
private TimeSpan _animationStartedTime = TimeSpan.Zero;
246269

0 commit comments

Comments
 (0)