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="device"></param>
|
||||||
/// <param name="commandBuffer"></param>
|
/// <param name="commandBuffer"></param>
|
||||||
/// <param name="filePath"></param>
|
/// <param name="filePath"></param>
|
||||||
/// <returns></returns>
|
/// <returns>A Texture object.</returns>
|
||||||
public static Texture LoadPNG(GraphicsDevice device, CommandBuffer commandBuffer, string filePath)
|
public static Texture LoadPNG(
|
||||||
{
|
GraphicsDevice device,
|
||||||
var pixels = Refresh.Refresh_Image_Load(
|
CommandBuffer commandBuffer,
|
||||||
|
string filePath
|
||||||
|
) {
|
||||||
|
var pixels = Refresh.Refresh_Image_LoadPNGFromFile(
|
||||||
filePath,
|
filePath,
|
||||||
out var width,
|
out var width,
|
||||||
out var height,
|
out var height,
|
||||||
|
@ -53,7 +56,56 @@ namespace MoonWorks.Graphics
|
||||||
var texture = new Texture(device, textureCreateInfo);
|
var texture = new Texture(device, textureCreateInfo);
|
||||||
commandBuffer.SetTextureData(texture, pixels, byteCount);
|
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;
|
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)
|
public static Texture LoadDDS(GraphicsDevice graphicsDevice, CommandBuffer commandBuffer, System.IO.Stream stream)
|
||||||
{
|
{
|
||||||
using (var reader = new BinaryReader(stream))
|
using (var reader = new BinaryReader(stream))
|
||||||
|
|
Loading…
Reference in New Issue