Restore `BitmapBuffer.AsSpan` and add `AggressiveInlining`

fixes 9a5a75e5b and 7ab2ca6b8
This commit is contained in:
YoshiRulz 2024-10-21 17:39:51 +10:00
parent 4f82b30370
commit 9acdcdbcf7
No known key found for this signature in database
GPG Key ID: C4DE31C245353FB7
2 changed files with 9 additions and 2 deletions

View File

@ -6,6 +6,7 @@ using System.Drawing;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using BizHawk.Common.CollectionExtensions; using BizHawk.Common.CollectionExtensions;
@ -36,6 +37,11 @@ namespace BizHawk.Bizware.Graphics
private GCHandle CurrLockHandle; private GCHandle CurrLockHandle;
private BitmapData CurrLock; private BitmapData CurrLock;
/// <summary>same as <see cref="Pixels"/> (<see cref="PixelFormat.Format32bppArgb">A8R8G8B8</see>)</summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Span<int> AsSpan()
=> Pixels;
/// <exception cref="InvalidOperationException">already locked</exception> /// <exception cref="InvalidOperationException">already locked</exception>
/// <remarks>TODO add read/write semantic, for wraps</remarks> /// <remarks>TODO add read/write semantic, for wraps</remarks>
public BitmapData LockBits() public BitmapData LockBits()
@ -221,7 +227,7 @@ namespace BizHawk.Bizware.Graphics
} }
public BitmapBuffer Copy() public BitmapBuffer Copy()
=> new(width: Width, height: Height, pixels: Pixels.AsSpan().ToArray()); => new(width: Width, height: Height, pixels: AsSpan().ToArray());
/// <remarks>TODO surely there's a better implementation --yoshi</remarks> /// <remarks>TODO surely there's a better implementation --yoshi</remarks>
public BitmapBuffer Copy(Rectangle region) public BitmapBuffer Copy(Rectangle region)
@ -543,7 +549,7 @@ namespace BizHawk.Bizware.Graphics
} }
public bool SequenceEqual(BitmapBuffer other) public bool SequenceEqual(BitmapBuffer other)
=> Width == other.Width && Height == other.Height && Pixels.SequenceEqual(other.Pixels); => Width == other.Width/* && Height == other.Height*/ && AsSpan().SequenceEqual(other.AsSpan());
/// <summary> /// <summary>
/// Dumps this BitmapBuffer to a new System.Drawing.Bitmap /// Dumps this BitmapBuffer to a new System.Drawing.Bitmap

View File

@ -322,6 +322,7 @@ namespace BizHawk.Common.CollectionExtensions
return true; return true;
} }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool SequenceEqual<T>(this T[] a, ReadOnlySpan<T> b) where T : IEquatable<T> => a.AsSpan().SequenceEqual(b); public static bool SequenceEqual<T>(this T[] a, ReadOnlySpan<T> b) where T : IEquatable<T> => a.AsSpan().SequenceEqual(b);
} }
} }