From a356345646593071fe3d7f5666fa13b9e900b24a Mon Sep 17 00:00:00 2001 From: tgrimmer <19311462+bluescan@users.noreply.github.com> Date: Sat, 29 Jun 2024 16:03:24 -0700 Subject: [PATCH] tImageKTX now uses CreateFromNamedFile instead of CreateFromMemory if the file load call is used. --- Modules/Image/Inc/Image/tImageKTX.h | 2 ++ Modules/Image/Src/tImageKTX.cpp | 25 +++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Modules/Image/Inc/Image/tImageKTX.h b/Modules/Image/Inc/Image/tImageKTX.h index 37e7db24..00acf57a 100644 --- a/Modules/Image/Inc/Image/tImageKTX.h +++ b/Modules/Image/Inc/Image/tImageKTX.h @@ -19,6 +19,7 @@ #include #include #include +struct ktxTexture; namespace tImage { @@ -212,6 +213,7 @@ class tImageKTX : public tBaseImage tString Filename; private: + bool LoadFromTexture(ktxTexture* texture, const LoadParams& paramsIn); void SetStateBit(StateBit state) { States |= 1 << int(state); } // The states are bits in this States member. diff --git a/Modules/Image/Src/tImageKTX.cpp b/Modules/Image/Src/tImageKTX.cpp index b0074604..73bba079 100644 --- a/Modules/Image/Src/tImageKTX.cpp +++ b/Modules/Image/Src/tImageKTX.cpp @@ -754,19 +754,30 @@ bool tImageKTX::Load(const tString& ktxFile, const LoadParams& loadParams) return false; } + #if 0 int ktxSizeBytes = 0; uint8* ktxData = (uint8*)tSystem::tLoadFile(ktxFile, 0, &ktxSizeBytes); bool success = Load(ktxData, ktxSizeBytes, loadParams); delete[] ktxData; - return success; + #endif + + ktx_error_code_e result = KTX_SUCCESS; + ktxTexture* texture = nullptr; + result = ktxTexture_CreateFromNamedFile(ktxFile.Chr(), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &texture); + if (!texture || (result != KTX_SUCCESS)) + { + SetStateBit(StateBit::Fatal_CouldNotParseFile); + return false; + } + + return LoadFromTexture(texture, loadParams); } bool tImageKTX::Load(const uint8* ktxData, int ktxSizeBytes, const LoadParams& paramsIn) { Clear(); - LoadParams params(paramsIn); ktx_error_code_e result = KTX_SUCCESS; ktxTexture* texture = nullptr; @@ -777,6 +788,16 @@ bool tImageKTX::Load(const uint8* ktxData, int ktxSizeBytes, const LoadParams& p return false; } + return LoadFromTexture(texture, paramsIn); +} + + +bool tImageKTX::LoadFromTexture(ktxTexture* texture, const LoadParams& paramsIn) +{ + tAssert(texture); + LoadParams params(paramsIn); + ktx_error_code_e result = KTX_SUCCESS; + NumImages = texture->numFaces; // Number of faces. 1 or 6 for cubemaps. int numLayers = texture->numLayers; // Number of array layers. I believe this will be > 1 for 3D textures that are made of an array of layers. NumMipmapLayers = texture->numLevels; // Mipmap levels.