diff --git a/src/gx/Texture.cpp b/src/gx/Texture.cpp index 35b5653..f143dd1 100644 --- a/src/gx/Texture.cpp +++ b/src/gx/Texture.cpp @@ -31,6 +31,19 @@ namespace Texture { }; } +int32_t s_pixelFormatToMipBitsCache[NUM_PIXEL_FORMATS] = { + -1, // PIXEL_DXT1 + -1, // PIXEL_DXT3 + -1, // PIXEL_ARGB8888 + 0, // PIXEL_ARGB1555 + 0, // PIXEL_ARGB4444 + 0, // PIXEL_RGB565 + -1, // PIXEL_A8 + -1, // PIXEL_DXT5 + -1, // PIXEL_UNSPECIFIED + 1, // PIXEL_ARGB2565 +}; + static CImVector CRAPPY_GREEN = { 0x00, 0xFF, 0x00, 0xFF }; void AsyncTextureWait(CTexture* texture) { @@ -351,6 +364,17 @@ CGxTex* TextureAllocGxTex(EGxTexTarget target, uint32_t width, uint32_t height, return nullptr; } +MipBits* TextureAllocMippedImg(PIXEL_FORMAT pixelFormat, uint32_t width, uint32_t height) { + auto cache = s_pixelFormatToMipBitsCache[pixelFormat]; + + if (width < 8 || height < 8 || width > 256 || height > 256 || cache == -1) { + return MippedImgAllocA(pixelFormat, width, height, __FILE__, __LINE__); + } + + // TODO + return nullptr; +} + void GxTexUpdate(CGxTex* texId, int32_t minX, int32_t minY, int32_t maxX, int32_t maxY, int32_t immediate) { CiRect rect = { minY, minX, maxY, maxX }; GxTexUpdate(texId, rect, immediate); diff --git a/src/gx/Texture.hpp b/src/gx/Texture.hpp index 8fa25d1..a518a17 100644 --- a/src/gx/Texture.hpp +++ b/src/gx/Texture.hpp @@ -47,6 +47,8 @@ uint32_t MippedImgCalcSize(uint32_t, uint32_t, uint32_t); CGxTex* TextureAllocGxTex(EGxTexTarget, uint32_t, uint32_t, uint32_t, EGxTexFormat, CGxTexFlags, void*, void (*userFunc)(EGxTexCommand, uint32_t, uint32_t, uint32_t, uint32_t, void*, uint32_t&, const void*&), EGxTexFormat); +MipBits* TextureAllocMippedImg(PIXEL_FORMAT pixelFormat, uint32_t width, uint32_t height); + HTEXTURE TextureCacheGetTexture(char*, char*, CGxTexFlags); HTEXTURE TextureCacheGetTexture(const CImVector&);