From e7898a1f3ce70784142e277b7b1031c458fdec91 Mon Sep 17 00:00:00 2001 From: Jan Date: Tue, 8 Sep 2020 12:34:54 +0200 Subject: [PATCH] Fix Cubemap mipmap sizes --- src/ObjCommon/Image/Texture.cpp | 5 ----- src/ObjCommon/Image/Texture.h | 1 - src/ObjCommon/Image/TextureConverter.cpp | 2 +- src/ObjLoading/Game/T6/ObjLoaderT6.cpp | 2 +- src/ObjWriting/Image/DdsWriter.cpp | 2 +- src/ObjWriting/Image/IwiWriter27.cpp | 4 ++-- 6 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/ObjCommon/Image/Texture.cpp b/src/ObjCommon/Image/Texture.cpp index db106765..31d25d05 100644 --- a/src/ObjCommon/Image/Texture.cpp +++ b/src/ObjCommon/Image/Texture.cpp @@ -219,11 +219,6 @@ TextureType TextureCube::GetTextureType() const } int TextureCube::GetFaceCount() const -{ - return 6; -} - -size_t TextureCube::GetSizeOfMipLevel(const int mipLevel) const { return FACE_COUNT; } diff --git a/src/ObjCommon/Image/Texture.h b/src/ObjCommon/Image/Texture.h index 5545724f..8df7cf45 100644 --- a/src/ObjCommon/Image/Texture.h +++ b/src/ObjCommon/Image/Texture.h @@ -93,7 +93,6 @@ public: int GetFaceCount() const override; - size_t GetSizeOfMipLevel(int mipLevel) const override; uint8_t* GetBufferForMipLevel(int mipLevel, int face) override; }; diff --git a/src/ObjCommon/Image/TextureConverter.cpp b/src/ObjCommon/Image/TextureConverter.cpp index 531a621d..5157492f 100644 --- a/src/ObjCommon/Image/TextureConverter.cpp +++ b/src/ObjCommon/Image/TextureConverter.cpp @@ -158,7 +158,7 @@ void TextureConverter::ReorderUnsignedToUnsigned() const for (auto mipLevel = 0; mipLevel < mipCount; mipLevel++) { - const auto mipLevelSize = m_input_texture->GetSizeOfMipLevel(mipLevel); + const auto mipLevelSize = m_input_texture->GetSizeOfMipLevel(mipLevel) * m_input_texture->GetFaceCount(); const auto* inputBuffer = m_input_texture->GetBufferForMipLevel(mipLevel); auto* outputBuffer = m_output_texture->GetBufferForMipLevel(mipLevel); diff --git a/src/ObjLoading/Game/T6/ObjLoaderT6.cpp b/src/ObjLoading/Game/T6/ObjLoaderT6.cpp index 86c36152..6cb15f1d 100644 --- a/src/ObjLoading/Game/T6/ObjLoaderT6.cpp +++ b/src/ObjLoading/Game/T6/ObjLoaderT6.cpp @@ -185,7 +185,7 @@ void ObjLoaderT6::LoadImageFromIwi(T6::GfxImage* image, ISearchPath* searchPath, const int textureMipCount = loadedTexture->GetMipMapCount(); for(int mipLevel = 0; mipLevel < textureMipCount; mipLevel++) - image->loadedSize += loadedTexture->GetSizeOfMipLevel(mipLevel); + image->loadedSize += loadedTexture->GetSizeOfMipLevel(mipLevel) * loadedTexture->GetFaceCount(); } else { diff --git a/src/ObjWriting/Image/DdsWriter.cpp b/src/ObjWriting/Image/DdsWriter.cpp index 5c2b958b..86568375 100644 --- a/src/ObjWriting/Image/DdsWriter.cpp +++ b/src/ObjWriting/Image/DdsWriter.cpp @@ -220,7 +220,7 @@ public: for (auto mipLevel = 0; mipLevel < mipCount; mipLevel++) { const auto* buffer = m_texture->GetBufferForMipLevel(mipLevel); - const auto mipLevelSize = m_texture->GetSizeOfMipLevel(mipLevel); + const auto mipLevelSize = m_texture->GetSizeOfMipLevel(mipLevel) * m_texture->GetFaceCount(); m_file->Write(buffer, 1, mipLevelSize); } } diff --git a/src/ObjWriting/Image/IwiWriter27.cpp b/src/ObjWriting/Image/IwiWriter27.cpp index 0face51c..301d03c1 100644 --- a/src/ObjWriting/Image/IwiWriter27.cpp +++ b/src/ObjWriting/Image/IwiWriter27.cpp @@ -108,7 +108,7 @@ void IwiWriter27::DumpImage(FileAPI::IFile* file, Texture* texture) const int textureMipCount = texture->HasMipMaps() ? texture->GetMipMapCount() : 1; for (int currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--) { - const size_t mipLevelSize = texture->GetSizeOfMipLevel(currentMipLevel); + const size_t mipLevelSize = texture->GetSizeOfMipLevel(currentMipLevel) * texture->GetFaceCount(); currentFileSize += mipLevelSize; if(currentMipLevel < static_cast(_countof(iwi27::IwiHeader::fileSizeForPicmip))) @@ -132,7 +132,7 @@ void IwiWriter27::DumpImage(FileAPI::IFile* file, Texture* texture) for (int currentMipLevel = textureMipCount - 1; currentMipLevel >= 0; currentMipLevel--) { - const size_t mipLevelSize = texture->GetSizeOfMipLevel(currentMipLevel); + const size_t mipLevelSize = texture->GetSizeOfMipLevel(currentMipLevel) * texture->GetFaceCount(); file->Write(texture->GetBufferForMipLevel(currentMipLevel), 1, mipLevelSize); } }