forked from MoonsideGames/MoonWorks
load images from memory + QOI support
parent
8209051a3c
commit
8134761e44
|
@ -1 +1 @@
|
|||
Subproject commit 10f54d6b034d685d314233f9507a4bbac7f235b4
|
||||
Subproject commit fb5fee5f568bbb9f42920f0fcdd9f85024f5bf00
|
|
@ -28,10 +28,13 @@ namespace MoonWorks.Graphics
|
|||
/// <param name="device"></param>
|
||||
/// <param name="commandBuffer"></param>
|
||||
/// <param name="filePath"></param>
|
||||
/// <returns></returns>
|
||||
public static Texture LoadPNG(GraphicsDevice device, CommandBuffer commandBuffer, string filePath)
|
||||
{
|
||||
var pixels = Refresh.Refresh_Image_Load(
|
||||
/// <returns>A Texture object.</returns>
|
||||
public static Texture LoadPNG(
|
||||
GraphicsDevice device,
|
||||
CommandBuffer commandBuffer,
|
||||
string filePath
|
||||
) {
|
||||
var pixels = Refresh.Refresh_Image_LoadPNGFromFile(
|
||||
filePath,
|
||||
out var width,
|
||||
out var height,
|
||||
|
@ -53,7 +56,56 @@ namespace MoonWorks.Graphics
|
|||
var texture = new Texture(device, textureCreateInfo);
|
||||
commandBuffer.SetTextureData(texture, pixels, byteCount);
|
||||
|
||||
Refresh.Refresh_Image_Free(pixels);
|
||||
Refresh.Refresh_Image_FreePNG(pixels);
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads a PNG from a byte array.
|
||||
/// NOTE: You can queue as many of these as you want on to a command buffer but it MUST be submitted!
|
||||
/// </summary>
|
||||
/// <param name="device"></param>
|
||||
/// <param name="commandBuffer"></param>
|
||||
/// <param name="data"></param>
|
||||
/// <returns>A Texture object.</returns>
|
||||
public unsafe static Texture LoadPNG(
|
||||
GraphicsDevice device,
|
||||
CommandBuffer commandBuffer,
|
||||
byte[] data
|
||||
) {
|
||||
IntPtr pixels;
|
||||
int width, height, numChannels;
|
||||
|
||||
fixed (byte* ptr = &data[0])
|
||||
{
|
||||
pixels = Refresh.Refresh_Image_LoadPNGFromMemory(
|
||||
(nint) ptr,
|
||||
data.Length,
|
||||
out width,
|
||||
out height,
|
||||
out numChannels
|
||||
);
|
||||
}
|
||||
|
||||
TextureCreateInfo textureCreateInfo = new TextureCreateInfo
|
||||
{
|
||||
Width = (uint) width,
|
||||
Height = (uint) height,
|
||||
Depth = 1,
|
||||
Format = TextureFormat.R8G8B8A8,
|
||||
IsCube = false,
|
||||
LevelCount = 1,
|
||||
SampleCount = SampleCount.One,
|
||||
UsageFlags = TextureUsageFlags.Sampler
|
||||
};
|
||||
|
||||
var byteCount = (uint) (width * height * numChannels);
|
||||
|
||||
var texture = new Texture(device, textureCreateInfo);
|
||||
commandBuffer.SetTextureData(texture, pixels, byteCount);
|
||||
|
||||
Refresh.Refresh_Image_FreePNG(pixels);
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
@ -74,6 +126,97 @@ namespace MoonWorks.Graphics
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads a QOI from a file path.
|
||||
/// NOTE: You can queue as many of these as you want on to a command buffer but it MUST be submitted!
|
||||
/// </summary>
|
||||
/// <param name="device"></param>
|
||||
/// <param name="commandBuffer"></param>
|
||||
/// <param name="filePath"></param>
|
||||
/// <returns>A Texture object.</returns>
|
||||
public unsafe static Texture LoadQOI(
|
||||
GraphicsDevice device,
|
||||
CommandBuffer commandBuffer,
|
||||
string filePath
|
||||
) {
|
||||
var pixels = Refresh.Refresh_Image_LoadQOIFromFile(
|
||||
filePath,
|
||||
out var width,
|
||||
out var height,
|
||||
out var numChannels
|
||||
);
|
||||
|
||||
var byteCount = (uint) (width * height * numChannels);
|
||||
|
||||
TextureCreateInfo textureCreateInfo = new TextureCreateInfo
|
||||
{
|
||||
Width = (uint) width,
|
||||
Height = (uint) height,
|
||||
Depth = 1,
|
||||
Format = TextureFormat.R8G8B8A8,
|
||||
IsCube = false,
|
||||
LevelCount = 1,
|
||||
SampleCount = SampleCount.One,
|
||||
UsageFlags = TextureUsageFlags.Sampler
|
||||
};
|
||||
|
||||
var texture = new Texture(device, textureCreateInfo);
|
||||
commandBuffer.SetTextureData(texture, pixels, byteCount);
|
||||
|
||||
Refresh.Refresh_Image_FreeQOI(pixels);
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads a QOI from a byte array.
|
||||
/// NOTE: You can queue as many of these as you want on to a command buffer but it MUST be submitted!
|
||||
/// </summary>
|
||||
/// <param name="device"></param>
|
||||
/// <param name="commandBuffer"></param>
|
||||
/// <param name="filePath"></param>
|
||||
/// <returns>A Texture object.</returns>
|
||||
public unsafe static Texture LoadQOI(
|
||||
GraphicsDevice device,
|
||||
CommandBuffer commandBuffer,
|
||||
byte[] data
|
||||
) {
|
||||
IntPtr pixels;
|
||||
int width, height, numChannels;
|
||||
|
||||
fixed (byte* ptr = &data[0])
|
||||
{
|
||||
pixels = Refresh.Refresh_Image_LoadQOIFromMemory(
|
||||
(nint) ptr,
|
||||
data.Length,
|
||||
out width,
|
||||
out height,
|
||||
out numChannels
|
||||
);
|
||||
}
|
||||
|
||||
TextureCreateInfo textureCreateInfo = new TextureCreateInfo
|
||||
{
|
||||
Width = (uint) width,
|
||||
Height = (uint) height,
|
||||
Depth = 1,
|
||||
Format = TextureFormat.R8G8B8A8,
|
||||
IsCube = false,
|
||||
LevelCount = 1,
|
||||
SampleCount = SampleCount.One,
|
||||
UsageFlags = TextureUsageFlags.Sampler
|
||||
};
|
||||
|
||||
var byteCount = (uint) (width * height * numChannels);
|
||||
|
||||
var texture = new Texture(device, textureCreateInfo);
|
||||
commandBuffer.SetTextureData(texture, pixels, byteCount);
|
||||
|
||||
Refresh.Refresh_Image_FreePNG(pixels);
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
public static Texture LoadDDS(GraphicsDevice graphicsDevice, CommandBuffer commandBuffer, System.IO.Stream stream)
|
||||
{
|
||||
using (var reader = new BinaryReader(stream))
|
||||
|
|
Loading…
Reference in New Issue