From b7382027d1f5e325aea9c990113c6ada83b20a1e Mon Sep 17 00:00:00 2001 From: Katelyn Gadd Date: Sat, 13 Apr 2024 15:23:28 -0700 Subject: [PATCH] Add Texture2D.GetDataPointerEXT --- src/Graphics/Texture2D.cs | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/Graphics/Texture2D.cs b/src/Graphics/Texture2D.cs index 582d8ffbb..b01056311 100644 --- a/src/Graphics/Texture2D.cs +++ b/src/Graphics/Texture2D.cs @@ -298,11 +298,30 @@ int elementCount ); } + int elementSizeInBytes = MarshalHelper.SizeOf(); + ValidateGetDataFormat(Format, elementSizeInBytes); + + GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); + GetDataPointerEXT( + level, + rect, + handle.AddrOfPinnedObject() + (startIndex * elementSizeInBytes), + elementCount * elementSizeInBytes + ); + handle.Free(); + } + + public void GetDataPointerEXT( + int level, + Rectangle? rect, + IntPtr data, + int dataLengthBytes + ) { int subX, subY, subW, subH; if (rect == null) { - subX = 0; - subY = 0; + subX = 0; + subY = 0; subW = Width >> level; subH = Height >> level; } @@ -313,11 +332,6 @@ int elementCount subW = rect.Value.Width; subH = rect.Value.Height; } - - int elementSizeInBytes = MarshalHelper.SizeOf(); - ValidateGetDataFormat(Format, elementSizeInBytes); - - GCHandle handle = GCHandle.Alloc(data, GCHandleType.Pinned); FNA3D.FNA3D_GetTextureData2D( GraphicsDevice.GLDevice, texture, @@ -326,10 +340,9 @@ int elementCount subW, subH, level, - handle.AddrOfPinnedObject() + (startIndex * elementSizeInBytes), - elementCount * elementSizeInBytes + data, + dataLengthBytes ); - handle.Free(); } #endregion