diff --git a/inc/hgl/graph/manager/TextureManager.h b/inc/hgl/graph/manager/TextureManager.h index 8f5cab84..50a77d3d 100644 --- a/inc/hgl/graph/manager/TextureManager.h +++ b/inc/hgl/graph/manager/TextureManager.h @@ -15,15 +15,15 @@ class TextureManager:public GraphManager DeviceQueue *texture_queue; TextureCmdBuffer *texture_cmd_buf; -protected: - - DeviceBuffer *CreateTransferSourceBuffer(const VkDeviceSize,const void *data_ptr=nullptr); - public: TextureManager(); virtual ~TextureManager(); +public: //Buffer + + DeviceBuffer *CreateTransferSourceBuffer(const VkDeviceSize,const void *data_ptr=nullptr); + public: //Image VkImage CreateImage (VkImageCreateInfo *); diff --git a/src/SceneGraph/Vulkan/Texture/VKTexture2DArrayLoader.cpp b/src/SceneGraph/Vulkan/Texture/VKTexture2DArrayLoader.cpp index ee297393..26ea06c9 100644 --- a/src/SceneGraph/Vulkan/Texture/VKTexture2DArrayLoader.cpp +++ b/src/SceneGraph/Vulkan/Texture/VKTexture2DArrayLoader.cpp @@ -1,6 +1,8 @@ #include"VKTextureLoader.h" #include #include +#include +#include VK_NAMESPACE_BEGIN //template<> void VkTextureLoader::OnExtent(VkExtent3D &extent) @@ -15,10 +17,13 @@ VK_NAMESPACE_BEGIN // return device->CreateTexture2DArray(tci); //} -bool LoadTexture2DLayerFromFile(GPUDevice *device,Texture2DArray *ta,const uint32_t layer,const OSString &filename,bool auto_mipmaps) +bool LoadTexture2DLayerFromFile(TextureManager *tm,Texture2DArray *ta,const uint32_t layer,const OSString &filename,bool auto_mipmaps) { + if(!tm||filename.IsEmpty()) + return(false); + //注:依然是Texture2D,则非Texture2DArray。因为这里LOAD的是2D纹理,并不是2DArray纹理 - VkTextureLoader loader(device,auto_mipmaps); + VkTextureLoader loader(tm,auto_mipmaps); if(!loader.Load(filename)) return(false); @@ -33,6 +38,6 @@ bool LoadTexture2DLayerFromFile(GPUDevice *device,Texture2DArray *ta,const uint3 scope.Width=ta->GetWidth(); scope.Height=ta->GetHeight(); - return device->ChangeTexture2DArray(ta,buf,scope,layer,1); + return tm->ChangeTexture2DArray(ta,buf,scope,layer,1); } VK_NAMESPACE_END diff --git a/src/SceneGraph/Vulkan/Texture/VKTexture2DLoader.cpp b/src/SceneGraph/Vulkan/Texture/VKTexture2DLoader.cpp index f0a6211d..a01e5ea2 100644 --- a/src/SceneGraph/Vulkan/Texture/VKTexture2DLoader.cpp +++ b/src/SceneGraph/Vulkan/Texture/VKTexture2DLoader.cpp @@ -12,12 +12,15 @@ template<> void VkTextureLoader::OnExtent(VkExtent3D template<> Texture2D *VkTextureLoader::OnCreateTexture(TextureCreateInfo *tci) { - return device->CreateTexture2D(tci); + return tex_manager->CreateTexture2D(tci); } -Texture2D *CreateTexture2DFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps) +Texture2D *CreateTexture2DFromFile(TextureManager *tm,const OSString &filename,bool auto_mipmaps) { - VkTextureLoader loader(device,auto_mipmaps); + if(!tm||filename.IsEmpty()) + return(nullptr); + + VkTextureLoader loader(tm,auto_mipmaps); if(!loader.Load(filename)) return(nullptr); diff --git a/src/SceneGraph/Vulkan/Texture/VKTextureCubeLoader.cpp b/src/SceneGraph/Vulkan/Texture/VKTextureCubeLoader.cpp index 452e9766..bcdd4ca6 100644 --- a/src/SceneGraph/Vulkan/Texture/VKTextureCubeLoader.cpp +++ b/src/SceneGraph/Vulkan/Texture/VKTextureCubeLoader.cpp @@ -12,12 +12,15 @@ template<> void VkTextureLoader::OnExtent(VkExten template<> TextureCube *VkTextureLoader::OnCreateTexture(TextureCreateInfo *tci) { - return device->CreateTextureCube(tci); + return tex_manager->CreateTextureCube(tci); } -TextureCube *CreateTextureCubeFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps) +TextureCube *CreateTextureCubeFromFile(TextureManager *tm,const OSString &filename,bool auto_mipmaps) { - VkTextureLoader loader(device,auto_mipmaps); + if(!tm||filename.IsEmpty()) + return(nullptr); + + VkTextureLoader loader(tm,auto_mipmaps); if(!loader.Load(filename)) return(nullptr); diff --git a/src/SceneGraph/Vulkan/Texture/VKTextureLoader.h b/src/SceneGraph/Vulkan/Texture/VKTextureLoader.h index be268e31..9b47963f 100644 --- a/src/SceneGraph/Vulkan/Texture/VKTextureLoader.h +++ b/src/SceneGraph/Vulkan/Texture/VKTextureLoader.h @@ -1,8 +1,8 @@ #pragma once -#include -#include #include +#include #include +#include #include VK_NAMESPACE_BEGIN @@ -10,7 +10,7 @@ template class VkTextureLoader:public TL { protected: - GPUDevice *device; + TextureManager *tex_manager; DeviceBuffer *buf; T *tex; @@ -18,9 +18,9 @@ protected: public: - VkTextureLoader(GPUDevice *dev,const bool am) + VkTextureLoader(TextureManager *tm,const bool am) { - device=dev; + tex_manager=tm; buf=nullptr; tex=nullptr; auto_mipmaps=am; @@ -39,7 +39,7 @@ public: if(!CheckVulkanFormat(tex_format)) return(nullptr); - buf=device->CreateBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,total_bytes); + buf=tex_manager->CreateTransferSourceBuffer(total_bytes); if(!buf) return(nullptr); @@ -75,7 +75,7 @@ public: if(auto_mipmaps&&tex_file_header.mipmaps<=1) { - if(device->CheckFormatSupport(tex_format,VK_FORMAT_FEATURE_BLIT_DST_BIT)) + if(tex_manager->CheckFormatSupport(tex_format,VK_FORMAT_FEATURE_BLIT_DST_BIT)) { tci->usage|=VK_IMAGE_USAGE_TRANSFER_SRC_BIT; tci->SetAutoMipmaps();