From cef331cc09ac2f5c90196f5e40e908d97e26b096 Mon Sep 17 00:00:00 2001 From: James Benton Date: Sun, 28 May 2017 12:00:51 +0100 Subject: [PATCH] whb: Add GFD texture loading with WHBGfxLoadGFDTexture, WHBGfxFreeTexture. --- src/libwhb/include/whb/gfx.h | 7 +++++ src/libwhb/src/gfx_texture.c | 52 ++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/libwhb/src/gfx_texture.c diff --git a/src/libwhb/include/whb/gfx.h b/src/libwhb/include/whb/gfx.h index 095af9b1..96f52c18 100644 --- a/src/libwhb/include/whb/gfx.h +++ b/src/libwhb/include/whb/gfx.h @@ -80,6 +80,13 @@ WHBGfxInitFetchShader(WHBGfxShaderGroup *group); BOOL WHBGfxFreeShaderGroup(WHBGfxShaderGroup *group); +GX2Texture * +WHBGfxLoadGFDTexture(uint32_t index, + const void *file); + +BOOL +WHBGfxFreeTexture(GX2Texture *texture); + #ifdef __cplusplus } #endif diff --git a/src/libwhb/src/gfx_texture.c b/src/libwhb/src/gfx_texture.c new file mode 100644 index 00000000..b71f03ad --- /dev/null +++ b/src/libwhb/src/gfx_texture.c @@ -0,0 +1,52 @@ +#include "gfx_heap.h" +#include +#include +#include +#include + +GX2Texture * +WHBGfxLoadGFDTexture(uint32_t index, + const void *file) +{ + uint32_t headerSize, imageSize; + GX2Texture *texture = NULL; + void *image = NULL; + + if (index >= GFDGetTextureCount(file)) { + goto error; + } + + headerSize = GFDGetTextureHeaderSize(index, file); + imageSize = GFDGetTextureImageSize(index, file); + + if (!headerSize || !imageSize) { + goto error; + } + + texture = (GX2Texture *)GfxHeapAllocMEM2(headerSize, 64); + if (!texture) { + goto error; + } + + if (!GFDGetGX2RTexture(texture, index, file)) { + goto error; + } + + return texture; + +error: + if (texture) { + GX2RDestroySurfaceEx(&texture->surface, 0); + GfxHeapFreeMEM2(texture); + } + + return NULL; +} + +BOOL +WHBGfxFreeTexture(GX2Texture *texture) +{ + GX2RDestroySurfaceEx(&texture->surface, 0); + GfxHeapFreeMEM2(texture); + return TRUE; +}