From d1299ccc1301654d01a18a9452aeed1030fa1916 Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Mon, 16 Mar 2026 00:57:40 -0700 Subject: [PATCH] KRTexture2D::getDimensions has been extended to a Vector3i and promoted to KRTexture::getDimensions --- kraken/resources/texture/KRTexture.cpp | 4 ++-- kraken/resources/texture/KRTexture.h | 3 ++- kraken/resources/texture/KRTexture2D.cpp | 3 +-- kraken/resources/texture/KRTexture2D.h | 1 - kraken/resources/texture/KRTextureAnimated.cpp | 8 ++++++++ kraken/resources/texture/KRTextureAnimated.h | 4 ++++ kraken/resources/texture/KRTextureCube.cpp | 10 +++++++--- kraken/resources/texture/KRTextureCube.h | 1 + kraken/resources/texture/KRTextureKTX.cpp | 4 ++-- kraken/resources/texture/KRTextureKTX.h | 2 +- kraken/resources/texture/KRTextureKTX2.cpp | 4 ++-- kraken/resources/texture/KRTextureKTX2.h | 2 +- kraken/resources/texture/KRTexturePNG.cpp | 4 ++-- kraken/resources/texture/KRTexturePNG.h | 2 +- kraken/resources/texture/KRTexturePVR.cpp | 4 ++-- kraken/resources/texture/KRTexturePVR.h | 2 +- kraken/resources/texture/KRTextureTGA.cpp | 4 ++-- kraken/resources/texture/KRTextureTGA.h | 2 +- 18 files changed, 40 insertions(+), 24 deletions(-) diff --git a/kraken/resources/texture/KRTexture.cpp b/kraken/resources/texture/KRTexture.cpp index f4efce9..0702944 100755 --- a/kraken/resources/texture/KRTexture.cpp +++ b/kraken/resources/texture/KRTexture.cpp @@ -286,7 +286,7 @@ VkImage KRTexture::getImage(KrDeviceHandle device) return VK_NULL_HANDLE; } -bool KRTexture::allocate(KRDevice& device, hydra::Vector2i dimensions, VkImageCreateFlags imageCreateFlags, VkMemoryPropertyFlags properties, VkImage* image, VmaAllocation* allocation +bool KRTexture::allocate(KRDevice& device, hydra::Vector3i dimensions, VkImageCreateFlags imageCreateFlags, VkMemoryPropertyFlags properties, VkImage* image, VmaAllocation* allocation #if KRENGINE_DEBUG_GPU_LABELS , const char* debug_label #endif @@ -297,7 +297,7 @@ bool KRTexture::allocate(KRDevice& device, hydra::Vector2i dimensions, VkImageCr imageInfo.imageType = VK_IMAGE_TYPE_2D; imageInfo.extent.width = static_cast(dimensions.x); imageInfo.extent.height = static_cast(dimensions.y); - imageInfo.extent.depth = 1; + imageInfo.extent.depth = static_cast(dimensions.z); imageInfo.mipLevels = 1; imageInfo.arrayLayers = 1; imageInfo.format = VK_FORMAT_R8G8B8A8_SRGB; diff --git a/kraken/resources/texture/KRTexture.h b/kraken/resources/texture/KRTexture.h index 7131676..af682cd 100755 --- a/kraken/resources/texture/KRTexture.h +++ b/kraken/resources/texture/KRTexture.h @@ -89,6 +89,7 @@ public: bool hasMipmaps(); virtual int getFaceCount() const = 0; virtual VkFormat getFormat() const = 0; + virtual hydra::Vector3i getDimensions() const = 0; kraken_stream_level getStreamLevel(); float getLastFrameLodCoverage() const; @@ -129,7 +130,7 @@ protected: float m_last_frame_max_lod_coverage; texture_usage_t m_last_frame_usage; - bool allocate(KRDevice& device, hydra::Vector2i dimensions, VkImageCreateFlags imageCreateFlags, VkMemoryPropertyFlags properties, VkImage* image, VmaAllocation* allocation + bool allocate(KRDevice& device, hydra::Vector3i dimensions, VkImageCreateFlags imageCreateFlags, VkMemoryPropertyFlags properties, VkImage* image, VmaAllocation* allocation #if KRENGINE_DEBUG_GPU_LABELS , const char* debug_label #endif diff --git a/kraken/resources/texture/KRTexture2D.cpp b/kraken/resources/texture/KRTexture2D.cpp index a9faab4..486ff82 100755 --- a/kraken/resources/texture/KRTexture2D.cpp +++ b/kraken/resources/texture/KRTexture2D.cpp @@ -52,8 +52,7 @@ bool KRTexture2D::createGPUTexture(int lod_max_dim) return true; } - Vector2i dimensions2d = getDimensions(); - Vector3i dimensions = { dimensions2d.x, dimensions2d.y, 1 }; + Vector3i dimensions = getDimensions(); size_t bufferSize = getMemRequiredForSize(lod_max_dim); void* buffer = malloc(bufferSize); diff --git a/kraken/resources/texture/KRTexture2D.h b/kraken/resources/texture/KRTexture2D.h index 81b218d..e05cdd8 100755 --- a/kraken/resources/texture/KRTexture2D.h +++ b/kraken/resources/texture/KRTexture2D.h @@ -49,7 +49,6 @@ public: virtual bool save(mimir::Block& data) override; virtual bool getLodData(void* buffer, int lod_max_dim) = 0; - virtual hydra::Vector2i getDimensions() const = 0; protected: mimir::Block* m_pData; diff --git a/kraken/resources/texture/KRTextureAnimated.cpp b/kraken/resources/texture/KRTextureAnimated.cpp index 85a546b..12244ee 100755 --- a/kraken/resources/texture/KRTextureAnimated.cpp +++ b/kraken/resources/texture/KRTextureAnimated.cpp @@ -53,10 +53,13 @@ KRTextureAnimated::KRTextureAnimated(KRContext& context, std::string name) : KRT m_max_lod_max_dim = 2048; m_min_lod_max_dim = 64; + m_dimensions = Vector2i::Create(0, 0); for (int i = 0; i < m_frame_count; i++) { KRTexture2D* frame_texture = textureForFrame(i); if (frame_texture) { + m_dimensions.x = std::max(m_dimensions.x, frame_texture->getDimensions().x); + m_dimensions.y = std::max(m_dimensions.y, frame_texture->getDimensions().y); if (frame_texture->getMaxMipMap() < (int)m_max_lod_max_dim) m_max_lod_max_dim = frame_texture->getMaxMipMap(); if (frame_texture->getMinMipMap() > (int)m_min_lod_max_dim) m_min_lod_max_dim = frame_texture->getMinMipMap(); } @@ -162,3 +165,8 @@ VkFormat KRTextureAnimated::getFormat() const { return VK_FORMAT_UNDEFINED; } + +hydra::Vector3i KRTextureAnimated::getDimensions() const +{ + return Vector3i::Create(m_dimensions.x, m_dimensions.y, 1); +} \ No newline at end of file diff --git a/kraken/resources/texture/KRTextureAnimated.h b/kraken/resources/texture/KRTextureAnimated.h index 5718f5e..fcaebcb 100755 --- a/kraken/resources/texture/KRTextureAnimated.h +++ b/kraken/resources/texture/KRTextureAnimated.h @@ -35,6 +35,7 @@ #include "KRTexture2D.h" using namespace mimir; +using namespace hydra; class KRTextureAnimated : public KRTexture { @@ -54,6 +55,7 @@ public: virtual void resize(int max_dim) override; virtual int getFaceCount() const override; virtual VkFormat getFormat() const override; + virtual hydra::Vector3i getDimensions() const override; private: bool createGPUTexture(int lod_max_dim) override; @@ -64,4 +66,6 @@ private: std::string m_texture_base_name; std::string textureNameForFrame(int frame); KRTexture2D* textureForFrame(int frame); + + Vector2i m_dimensions; }; diff --git a/kraken/resources/texture/KRTextureCube.cpp b/kraken/resources/texture/KRTextureCube.cpp index 54c5c2f..0a6065e 100755 --- a/kraken/resources/texture/KRTextureCube.cpp +++ b/kraken/resources/texture/KRTextureCube.cpp @@ -38,7 +38,6 @@ using namespace hydra; KRTextureCube::KRTextureCube(KRContext& context, std::string name) : KRTexture(context, name) { - m_max_lod_max_dim = 2048; m_min_lod_max_dim = 64; @@ -75,7 +74,7 @@ bool KRTextureCube::createGPUTexture(int lod_max_dim) success = false; } else { KRTexture2D& tex = *m_textures[i]; - Vector2i texDimensions = tex.getDimensions(); + Vector2i texDimensions = tex.getDimensions().xy(); if (dimensions.x == 0) { dimensions = texDimensions; } else if (dimensions != texDimensions) { @@ -112,7 +111,7 @@ bool KRTextureCube::createGPUTexture(int lod_max_dim) texture.allocation = VK_NULL_HANDLE; texture.image = VK_NULL_HANDLE; - if (!allocate(device, dimensions, VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &texture.image, &texture.allocation + if (!allocate(device, Vector3i::Create(dimensions.x, dimensions.y, 1), VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &texture.image, &texture.allocation #if KRENGINE_DEBUG_GPU_LABELS , getName().c_str() #endif @@ -195,3 +194,8 @@ VkFormat KRTextureCube::getFormat() const // TODO - Implement return VK_FORMAT_UNDEFINED; } + +hydra::Vector3i KRTextureCube::getDimensions() const +{ + return m_textures[0] ? m_textures[0]->getDimensions() : Vector3i::Zero(); +} diff --git a/kraken/resources/texture/KRTextureCube.h b/kraken/resources/texture/KRTextureCube.h index f9b8608..c4e5137 100755 --- a/kraken/resources/texture/KRTextureCube.h +++ b/kraken/resources/texture/KRTextureCube.h @@ -48,6 +48,7 @@ public: virtual void requestResidency(float lodCoverage, texture_usage_t textureUsage) override; virtual int getFaceCount() const override; virtual VkFormat getFormat() const override; + virtual hydra::Vector3i getDimensions() const override; private: bool createGPUTexture(int lod_max_dim) override; diff --git a/kraken/resources/texture/KRTextureKTX.cpp b/kraken/resources/texture/KRTextureKTX.cpp index b696bd8..57b0879 100755 --- a/kraken/resources/texture/KRTextureKTX.cpp +++ b/kraken/resources/texture/KRTextureKTX.cpp @@ -127,9 +127,9 @@ KRTextureKTX::~KRTextureKTX() m_blocks.clear(); } -Vector2i KRTextureKTX::getDimensions() const +Vector3i KRTextureKTX::getDimensions() const { - return hydra::Vector2i::Create(Vector2i::Create(m_header.pixelWidth, m_header.pixelHeight)); + return hydra::Vector3i::Create(Vector3i::Create(m_header.pixelWidth, m_header.pixelHeight, m_header.pixelDepth)); } int KRTextureKTX::getFaceCount() const diff --git a/kraken/resources/texture/KRTextureKTX.h b/kraken/resources/texture/KRTextureKTX.h index f615729..386be74 100755 --- a/kraken/resources/texture/KRTextureKTX.h +++ b/kraken/resources/texture/KRTextureKTX.h @@ -46,7 +46,7 @@ public: bool getLodData(void* buffer, int lod_max_dim) override; virtual long getMemRequiredForSize(int max_dim) override; - virtual hydra::Vector2i getDimensions() const override; + virtual hydra::Vector3i getDimensions() const override; virtual int getFaceCount() const override; virtual VkFormat getFormat() const override; diff --git a/kraken/resources/texture/KRTextureKTX2.cpp b/kraken/resources/texture/KRTextureKTX2.cpp index 64124a6..60dc71f 100644 --- a/kraken/resources/texture/KRTextureKTX2.cpp +++ b/kraken/resources/texture/KRTextureKTX2.cpp @@ -76,9 +76,9 @@ KRTextureKTX2::~KRTextureKTX2() { } -Vector2i KRTextureKTX2::getDimensions() const +Vector3i KRTextureKTX2::getDimensions() const { - return Vector2i::Create(Vector2i::Create(m_header.pixelWidth, m_header.pixelHeight)); + return Vector3i::Create(Vector3i::Create(m_header.pixelWidth, m_header.pixelHeight, m_header.pixelDepth)); } long KRTextureKTX2::getMemRequiredForSize(int max_dim) diff --git a/kraken/resources/texture/KRTextureKTX2.h b/kraken/resources/texture/KRTextureKTX2.h index af60448..1d2373e 100644 --- a/kraken/resources/texture/KRTextureKTX2.h +++ b/kraken/resources/texture/KRTextureKTX2.h @@ -43,7 +43,7 @@ public: bool getLodData(void* buffer, int lod_max_dim) override; virtual long getMemRequiredForSize(int max_dim) override; - virtual hydra::Vector2i getDimensions() const override; + virtual hydra::Vector3i getDimensions() const override; virtual int getFaceCount() const override; virtual VkFormat getFormat() const override; diff --git a/kraken/resources/texture/KRTexturePNG.cpp b/kraken/resources/texture/KRTexturePNG.cpp index f725b18..79ac47d 100644 --- a/kraken/resources/texture/KRTexturePNG.cpp +++ b/kraken/resources/texture/KRTexturePNG.cpp @@ -163,9 +163,9 @@ long KRTexturePNG::getMemRequiredForSize(int max_dim) return m_imageSize; } -Vector2i KRTexturePNG::getDimensions() const +Vector3i KRTexturePNG::getDimensions() const { - return m_dimensions; + return Vector3i::Create(m_dimensions.x, m_dimensions.y, 1); } VkFormat KRTexturePNG::getFormat() const diff --git a/kraken/resources/texture/KRTexturePNG.h b/kraken/resources/texture/KRTexturePNG.h index 1d04079..c644033 100644 --- a/kraken/resources/texture/KRTexturePNG.h +++ b/kraken/resources/texture/KRTexturePNG.h @@ -49,7 +49,7 @@ public: #endif virtual long getMemRequiredForSize(int max_dim) override; - virtual hydra::Vector2i getDimensions() const override; + virtual hydra::Vector3i getDimensions() const override; virtual VkFormat getFormat() const override; virtual int getFaceCount() const override; private: diff --git a/kraken/resources/texture/KRTexturePVR.cpp b/kraken/resources/texture/KRTexturePVR.cpp index fdb86e5..be27511 100755 --- a/kraken/resources/texture/KRTexturePVR.cpp +++ b/kraken/resources/texture/KRTexturePVR.cpp @@ -149,9 +149,9 @@ KRTexturePVR::~KRTexturePVR() m_blocks.clear(); } -Vector2i KRTexturePVR::getDimensions() const +Vector3i KRTexturePVR::getDimensions() const { - return Vector2i::Create(m_iWidth, m_iHeight); + return Vector3i::Create(m_iWidth, m_iHeight, 1); } VkFormat KRTexturePVR::getFormat() const diff --git a/kraken/resources/texture/KRTexturePVR.h b/kraken/resources/texture/KRTexturePVR.h index a652b90..94531fe 100755 --- a/kraken/resources/texture/KRTexturePVR.h +++ b/kraken/resources/texture/KRTexturePVR.h @@ -43,7 +43,7 @@ public: bool getLodData(void* buffer, int lod_max_dim) override; virtual long getMemRequiredForSize(int max_dim) override; - virtual hydra::Vector2i getDimensions() const override; + virtual hydra::Vector3i getDimensions() const override; virtual VkFormat getFormat() const override; virtual int getFaceCount() const override; diff --git a/kraken/resources/texture/KRTextureTGA.cpp b/kraken/resources/texture/KRTextureTGA.cpp index 47be3f1..5184803 100755 --- a/kraken/resources/texture/KRTextureTGA.cpp +++ b/kraken/resources/texture/KRTextureTGA.cpp @@ -343,9 +343,9 @@ long KRTextureTGA::getMemRequiredForSize(int max_dim) return m_imageSize; } -Vector2i KRTextureTGA::getDimensions() const +Vector3i KRTextureTGA::getDimensions() const { - return m_dimensions; + return Vector3i::Create(m_dimensions.x, m_dimensions.y, 1); } VkFormat KRTextureTGA::getFormat() const diff --git a/kraken/resources/texture/KRTextureTGA.h b/kraken/resources/texture/KRTextureTGA.h index 0332f51..ed0edcc 100755 --- a/kraken/resources/texture/KRTextureTGA.h +++ b/kraken/resources/texture/KRTextureTGA.h @@ -49,7 +49,7 @@ public: #endif virtual long getMemRequiredForSize(int max_dim) override; - virtual hydra::Vector2i getDimensions() const override; + virtual hydra::Vector3i getDimensions() const override; virtual VkFormat getFormat() const override; virtual int getFaceCount() const override; private: