From 80bacd2b44b59a6c44b453b391cae58af1b8a8b6 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 14 Dec 2021 16:32:03 +0800 Subject: [PATCH] improved TextureLoader and VKTexture2DLoader --- inc/hgl/graph/TextureLoader.h | 10 +++++++++- inc/hgl/graph/VKTextureCreateInfo.h | 14 ++++++++------ src/SceneGraph/Vulkan/VKTexture2DLoader.cpp | 15 ++++++++++++--- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/inc/hgl/graph/TextureLoader.h b/inc/hgl/graph/TextureLoader.h index bbb60479..a35dd146 100644 --- a/inc/hgl/graph/TextureLoader.h +++ b/inc/hgl/graph/TextureLoader.h @@ -93,7 +93,15 @@ namespace hgl public: - TextureLoader(const VkImageViewType &ivt){type=ivt;} + TextureLoader(const VkImageViewType &ivt) + { + type=ivt; + format=VK_FORMAT_UNDEFINED; + mipmap_zero_total_bytes=0; + total_bytes=0; + } + + virtual ~TextureLoader()=default; virtual bool Load(io::InputStream *); bool Load(const OSString &filename); diff --git a/inc/hgl/graph/VKTextureCreateInfo.h b/inc/hgl/graph/VKTextureCreateInfo.h index 71483d5d..a6ff43dc 100644 --- a/inc/hgl/graph/VKTextureCreateInfo.h +++ b/inc/hgl/graph/VKTextureCreateInfo.h @@ -5,7 +5,10 @@ VK_NAMESPACE_BEGIN struct TextureCreateInfo { - VkExtent3D extent; + VkImageViewType type; + + VkExtent3D extent; //如为arrays,depth等同于layers + VkFormat format; uint32_t usage; uint32_t mipmap_zero_total_bytes; @@ -149,15 +152,14 @@ public: return(true); } - bool SetData(GPUBuffer *buf,const uint32_t w,const uint32_t h) + bool SetData(GPUBuffer *buf,const VkExtent3D &ext) { - if(!buf||w<=0||h<=0)return(false); + if(!buf)return(false); + if(ext.width<=0||ext.height<=0||ext.depth<=0)return(false); buffer=buf; - extent.width=w; - extent.height=h; - extent.depth=1; + extent=ext; return(true); } diff --git a/src/SceneGraph/Vulkan/VKTexture2DLoader.cpp b/src/SceneGraph/Vulkan/VKTexture2DLoader.cpp index 27dda4b7..3d36f597 100644 --- a/src/SceneGraph/Vulkan/VKTexture2DLoader.cpp +++ b/src/SceneGraph/Vulkan/VKTexture2DLoader.cpp @@ -8,6 +8,10 @@ VK_NAMESPACE_BEGIN namespace { + class VkTextureLoader + { + }; + class VkTexture2DLoader:public Texture2DLoader { protected: @@ -24,7 +28,6 @@ namespace VkTexture2DLoader(GPUDevice *dev,const bool am):device(dev) { buf=nullptr; - format=VK_FORMAT_UNDEFINED; tex=nullptr; auto_mipmaps=am; } @@ -56,8 +59,14 @@ namespace buf->Unmap(); TextureCreateInfo *tci=new TextureCreateInfo(format); - - tci->SetData(buf,file_header.width,file_header.height); + + VkExtent3D extent; + + extent.width =file_header.width; + extent.height =file_header.height; + extent.depth =1; + + tci->SetData(buf,extent); if(auto_mipmaps&&file_header.mipmaps<=1) {