From ce27a4bc4c663149ec105dbd9c13d7446eb3666c Mon Sep 17 00:00:00 2001 From: cosmonaut Date: Mon, 25 Jan 2021 18:18:25 -0800 Subject: [PATCH] adding some GetDatas and SetDatas --- src/Graphics/Resources/Buffer.cs | 6 ++-- src/Graphics/Resources/Texture.cs | 54 +++++++++++++++++-------------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/src/Graphics/Resources/Buffer.cs b/src/Graphics/Resources/Buffer.cs index 318d000..3beb765 100644 --- a/src/Graphics/Resources/Buffer.cs +++ b/src/Graphics/Resources/Buffer.cs @@ -55,9 +55,9 @@ namespace MoonWorks.Graphics } } - public unsafe void SetData( + public void SetData( uint offsetInBytes, - T* data, + IntPtr data, uint dataLengthInBytes ) where T : unmanaged { @@ -65,7 +65,7 @@ namespace MoonWorks.Graphics Device.Handle, Handle, offsetInBytes, - (IntPtr) data, + data, dataLengthInBytes ); } diff --git a/src/Graphics/Resources/Texture.cs b/src/Graphics/Resources/Texture.cs index 8df8139..8c99ca3 100644 --- a/src/Graphics/Resources/Texture.cs +++ b/src/Graphics/Resources/Texture.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Runtime.InteropServices; using RefreshCS; namespace MoonWorks.Graphics @@ -31,7 +32,7 @@ namespace MoonWorks.Graphics textureCreateInfo.SampleCount = SampleCount.One; textureCreateInfo.UsageFlags = TextureUsageFlags.SamplerBit; - var texture = new Texture(device, ref textureCreateInfo); + var texture = new Texture(device, textureCreateInfo); texture.SetData(pixels, (uint)(width * height * 4)); @@ -69,7 +70,7 @@ namespace MoonWorks.Graphics UsageFlags = usageFlags }; - return new Texture(device, ref textureCreateInfo); + return new Texture(device, textureCreateInfo); } public static Texture CreateTexture3D( @@ -95,7 +96,7 @@ namespace MoonWorks.Graphics UsageFlags = usageFlags }; - return new Texture(device, ref textureCreateInfo); + return new Texture(device, textureCreateInfo); } public static Texture CreateTextureCube( @@ -119,10 +120,10 @@ namespace MoonWorks.Graphics UsageFlags = usageFlags }; - return new Texture(device, ref textureCreateInfo); + return new Texture(device, textureCreateInfo); } - public Texture(GraphicsDevice device, ref TextureCreateInfo textureCreateInfo) : base(device) + public Texture(GraphicsDevice device, in TextureCreateInfo textureCreateInfo) : base(device) { Handle = Refresh.Refresh_CreateTexture( device.Handle, @@ -134,36 +135,39 @@ namespace MoonWorks.Graphics Height = textureCreateInfo.Height; } - public void SetData(IntPtr data, uint dataLengthInBytes) + public void SetData(in TextureSlice textureSlice, IntPtr data, uint dataLengthInBytes) { - Refresh.TextureSlice textureSlice; - textureSlice.texture = Handle; - textureSlice.rectangle.x = 0; - textureSlice.rectangle.y = 0; - textureSlice.rectangle.w = (int)Width; - textureSlice.rectangle.h = (int)Height; - textureSlice.level = 0; - textureSlice.layer = 0; - textureSlice.depth = 0; - Refresh.Refresh_SetTextureData( Device.Handle, - textureSlice, + textureSlice.ToRefreshTextureSlice(), data, dataLengthInBytes ); } - public void SetData(ref TextureSlice textureSlice, IntPtr data, uint dataLengthInBytes) + public void SetData(IntPtr data, uint dataLengthInBytes) { - var refreshTextureSlice = textureSlice.ToRefreshTextureSlice(); + SetData(new TextureSlice(this), data, dataLengthInBytes); + } - Refresh.Refresh_SetTextureData( - Device.Handle, - refreshTextureSlice, - data, - dataLengthInBytes - ); + public unsafe void SetData(in TextureSlice textureSlice, T[] data) where T : unmanaged + { + var size = Marshal.SizeOf(); + + fixed (T* ptr = &data[0]) + { + Refresh.Refresh_SetTextureData( + Device.Handle, + textureSlice.ToRefreshTextureSlice(), + (IntPtr) ptr, + (uint) (data.Length * size) + ); + } + } + + public unsafe void SetData(T[] data) where T : unmanaged + { + SetData(new TextureSlice(this), data); } } }