forked from MoonsideGames/MoonWorks
add array overloads to avoid explicit generic parameter
parent
5a2f7eadb8
commit
3584e670ee
|
@ -1731,6 +1731,28 @@ namespace MoonWorks.Graphics
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Copies array data into a buffer.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="buffer">The buffer to copy to.</param>
|
||||||
|
/// <param name="data">The array to copy from.</param>
|
||||||
|
/// <param name="bufferOffsetInBytes">Specifies where in the buffer to start copying.</param>
|
||||||
|
/// <param name="setDataOption">Specifies whether the buffer should be copied in immediate or deferred mode. When in doubt, use deferred.</param>
|
||||||
|
public unsafe void SetBufferData<T>(
|
||||||
|
Buffer buffer,
|
||||||
|
T[] data,
|
||||||
|
uint bufferOffsetInBytes = 0
|
||||||
|
) where T : unmanaged
|
||||||
|
{
|
||||||
|
SetBufferData(
|
||||||
|
buffer,
|
||||||
|
new Span<T>(data),
|
||||||
|
bufferOffsetInBytes,
|
||||||
|
0,
|
||||||
|
(uint) data.Length
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Copies arbitrary data into a buffer.
|
/// Copies arbitrary data into a buffer.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1797,6 +1819,26 @@ namespace MoonWorks.Graphics
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Copies array data into a buffer.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="buffer">The buffer to copy to.</param>
|
||||||
|
/// <param name="data">The span to copy from.</param>
|
||||||
|
/// <param name="bufferOffsetInBytes">Specifies where in the buffer to start copying.</param>
|
||||||
|
/// <param name="startElement">The index of the first element to copy from the array.</param>
|
||||||
|
/// <param name="numElements">How many elements to copy.</param>
|
||||||
|
/// <param name="setDataOption">Specifies whether the buffer should be copied in immediate or deferred mode. When in doubt, use deferred.</param>
|
||||||
|
public unsafe void SetBufferData<T>(
|
||||||
|
Buffer buffer,
|
||||||
|
T[] data,
|
||||||
|
uint bufferOffsetInBytes,
|
||||||
|
uint startElement,
|
||||||
|
uint numElements
|
||||||
|
) where T : unmanaged
|
||||||
|
{
|
||||||
|
SetBufferData<T>(buffer, new Span<T>(data), bufferOffsetInBytes, startElement, numElements);
|
||||||
|
}
|
||||||
|
|
||||||
public unsafe void SetBufferData<T>(
|
public unsafe void SetBufferData<T>(
|
||||||
Buffer buffer,
|
Buffer buffer,
|
||||||
IntPtr dataPtr,
|
IntPtr dataPtr,
|
||||||
|
@ -1826,6 +1868,15 @@ namespace MoonWorks.Graphics
|
||||||
SetTextureData(new TextureSlice(texture), data);
|
SetTextureData(new TextureSlice(texture), data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously copies data into a texture.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">An array of data to copy into the texture.</param>
|
||||||
|
public unsafe void SetTextureData<T>(Texture texture, T[] data) where T : unmanaged
|
||||||
|
{
|
||||||
|
SetTextureData(new TextureSlice(texture), new Span<T>(data));
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Asynchronously copies data into a texture slice.
|
/// Asynchronously copies data into a texture slice.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1851,6 +1902,16 @@ namespace MoonWorks.Graphics
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Asynchronously copies data into a texture slice.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="textureSlice">The texture slice to copy into.</param>
|
||||||
|
/// <param name="data">An array of data to copy into the texture.</param>
|
||||||
|
public unsafe void SetTextureData<T>(in TextureSlice textureSlice, T[] data) where T : unmanaged
|
||||||
|
{
|
||||||
|
SetTextureData(textureSlice, new Span<T>(data));
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Asynchronously copies data into a texture slice.
|
/// Asynchronously copies data into a texture slice.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -58,7 +58,7 @@ namespace MoonWorks.Graphics
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reads data out of a buffer and into an array.
|
/// Reads data out of a buffer and into a span.
|
||||||
/// This operation is only guaranteed to read up-to-date data if GraphicsDevice.Wait is called first.
|
/// This operation is only guaranteed to read up-to-date data if GraphicsDevice.Wait is called first.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="data">The span that data will be copied to.</param>
|
/// <param name="data">The span that data will be copied to.</param>
|
||||||
|
@ -68,6 +68,13 @@ namespace MoonWorks.Graphics
|
||||||
uint dataLengthInBytes
|
uint dataLengthInBytes
|
||||||
) where T : unmanaged
|
) where T : unmanaged
|
||||||
{
|
{
|
||||||
|
#if DEBUG
|
||||||
|
if (dataLengthInBytes > Size)
|
||||||
|
{
|
||||||
|
Logger.LogWarn("Requested too many bytes from buffer!");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
fixed (T* ptr = data)
|
fixed (T* ptr = data)
|
||||||
{
|
{
|
||||||
Refresh.Refresh_GetBufferData(
|
Refresh.Refresh_GetBufferData(
|
||||||
|
@ -79,6 +86,48 @@ namespace MoonWorks.Graphics
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads data out of a buffer and into an array.
|
||||||
|
/// This operation is only guaranteed to read up-to-date data if GraphicsDevice.Wait is called first.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">The span that data will be copied to.</param>
|
||||||
|
/// <param name="dataLengthInBytes">The length of the data to read.</param>
|
||||||
|
public unsafe void GetData<T>(
|
||||||
|
T[] data,
|
||||||
|
uint dataLengthInBytes
|
||||||
|
) where T : unmanaged
|
||||||
|
{
|
||||||
|
GetData(new Span<T>(data), dataLengthInBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads data out of a buffer and into a span.
|
||||||
|
/// This operation is only guaranteed to read up-to-date data if GraphicsDevice.Wait is called first.
|
||||||
|
/// Fills the span with as much data from the buffer as it can.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">The span that data will be copied to.</param>
|
||||||
|
public unsafe void GetData<T>(
|
||||||
|
Span<T> data
|
||||||
|
) where T : unmanaged
|
||||||
|
{
|
||||||
|
var lengthInBytes = System.Math.Min(data.Length * Marshal.SizeOf<T>(), Size);
|
||||||
|
GetData(data, (uint) lengthInBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads data out of a buffer and into an array.
|
||||||
|
/// This operation is only guaranteed to read up-to-date data if GraphicsDevice.Wait is called first.
|
||||||
|
/// Fills the array with as much data from the buffer as it can.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data">The span that data will be copied to.</param>
|
||||||
|
public unsafe void GetData<T>(
|
||||||
|
T[] data
|
||||||
|
) where T : unmanaged
|
||||||
|
{
|
||||||
|
var lengthInBytes = System.Math.Min(data.Length * Marshal.SizeOf<T>(), Size);
|
||||||
|
GetData(new Span<T>(data), (uint) lengthInBytes);
|
||||||
|
}
|
||||||
|
|
||||||
public static implicit operator BufferBinding(Buffer b)
|
public static implicit operator BufferBinding(Buffer b)
|
||||||
{
|
{
|
||||||
return new BufferBinding(b, 0);
|
return new BufferBinding(b, 0);
|
||||||
|
|
Loading…
Reference in New Issue