update codes of about TextureLoader

This commit is contained in:
hyzboy 2024-10-29 00:49:47 +08:00
parent d3df8d50ca
commit 2ffe402fae
5 changed files with 31 additions and 20 deletions

View File

@ -15,15 +15,15 @@ class TextureManager:public GraphManager
DeviceQueue *texture_queue; DeviceQueue *texture_queue;
TextureCmdBuffer *texture_cmd_buf; TextureCmdBuffer *texture_cmd_buf;
protected:
DeviceBuffer *CreateTransferSourceBuffer(const VkDeviceSize,const void *data_ptr=nullptr);
public: public:
TextureManager(); TextureManager();
virtual ~TextureManager(); virtual ~TextureManager();
public: //Buffer
DeviceBuffer *CreateTransferSourceBuffer(const VkDeviceSize,const void *data_ptr=nullptr);
public: //Image public: //Image
VkImage CreateImage (VkImageCreateInfo *); VkImage CreateImage (VkImageCreateInfo *);

View File

@ -1,6 +1,8 @@
#include"VKTextureLoader.h" #include"VKTextureLoader.h"
#include<hgl/io/FileInputStream.h> #include<hgl/io/FileInputStream.h>
#include<hgl/log/LogInfo.h> #include<hgl/log/LogInfo.h>
#include<hgl/graph/VKTexture.h>
#include<hgl/graph/manager/TextureManager.h>
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
//template<> void VkTextureLoader<Texture2DArray,Texture2DArrayLoader>::OnExtent(VkExtent3D &extent) //template<> void VkTextureLoader<Texture2DArray,Texture2DArrayLoader>::OnExtent(VkExtent3D &extent)
@ -15,10 +17,13 @@ VK_NAMESPACE_BEGIN
// return device->CreateTexture2DArray(tci); // 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纹理 //注依然是Texture2D则非Texture2DArray。因为这里LOAD的是2D纹理并不是2DArray纹理
VkTextureLoader<Texture2D,Texture2DLoader> loader(device,auto_mipmaps); VkTextureLoader<Texture2D,Texture2DLoader> loader(tm,auto_mipmaps);
if(!loader.Load(filename)) if(!loader.Load(filename))
return(false); return(false);
@ -33,6 +38,6 @@ bool LoadTexture2DLayerFromFile(GPUDevice *device,Texture2DArray *ta,const uint3
scope.Width=ta->GetWidth(); scope.Width=ta->GetWidth();
scope.Height=ta->GetHeight(); scope.Height=ta->GetHeight();
return device->ChangeTexture2DArray(ta,buf,scope,layer,1); return tm->ChangeTexture2DArray(ta,buf,scope,layer,1);
} }
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -12,12 +12,15 @@ template<> void VkTextureLoader<Texture2D,Texture2DLoader>::OnExtent(VkExtent3D
template<> Texture2D *VkTextureLoader<Texture2D,Texture2DLoader>::OnCreateTexture(TextureCreateInfo *tci) template<> Texture2D *VkTextureLoader<Texture2D,Texture2DLoader>::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<Texture2D,Texture2DLoader> loader(device,auto_mipmaps); if(!tm||filename.IsEmpty())
return(nullptr);
VkTextureLoader<Texture2D,Texture2DLoader> loader(tm,auto_mipmaps);
if(!loader.Load(filename)) if(!loader.Load(filename))
return(nullptr); return(nullptr);

View File

@ -12,12 +12,15 @@ template<> void VkTextureLoader<TextureCube,TextureCubeLoader>::OnExtent(VkExten
template<> TextureCube *VkTextureLoader<TextureCube,TextureCubeLoader>::OnCreateTexture(TextureCreateInfo *tci) template<> TextureCube *VkTextureLoader<TextureCube,TextureCubeLoader>::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<TextureCube,TextureCubeLoader> loader(device,auto_mipmaps); if(!tm||filename.IsEmpty())
return(nullptr);
VkTextureLoader<TextureCube,TextureCubeLoader> loader(tm,auto_mipmaps);
if(!loader.Load(filename)) if(!loader.Load(filename))
return(nullptr); return(nullptr);

View File

@ -1,8 +1,8 @@
#pragma once #pragma once
#include<hgl/graph/VK.h>
#include<hgl/graph/VKDevice.h>
#include<hgl/graph/VKBuffer.h> #include<hgl/graph/VKBuffer.h>
#include<hgl/graph/VKTexture.h>
#include<hgl/graph/TextureLoader.h> #include<hgl/graph/TextureLoader.h>
#include<hgl/graph/manager/TextureManager.h>
#include<hgl/graph/VKTextureCreateInfo.h> #include<hgl/graph/VKTextureCreateInfo.h>
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
@ -10,7 +10,7 @@ template<typename T,typename TL> class VkTextureLoader:public TL
{ {
protected: protected:
GPUDevice *device; TextureManager *tex_manager;
DeviceBuffer *buf; DeviceBuffer *buf;
T *tex; T *tex;
@ -18,9 +18,9 @@ protected:
public: public:
VkTextureLoader(GPUDevice *dev,const bool am) VkTextureLoader(TextureManager *tm,const bool am)
{ {
device=dev; tex_manager=tm;
buf=nullptr; buf=nullptr;
tex=nullptr; tex=nullptr;
auto_mipmaps=am; auto_mipmaps=am;
@ -39,7 +39,7 @@ public:
if(!CheckVulkanFormat(tex_format)) if(!CheckVulkanFormat(tex_format))
return(nullptr); return(nullptr);
buf=device->CreateBuffer(VK_BUFFER_USAGE_TRANSFER_SRC_BIT,total_bytes); buf=tex_manager->CreateTransferSourceBuffer(total_bytes);
if(!buf) if(!buf)
return(nullptr); return(nullptr);
@ -75,7 +75,7 @@ public:
if(auto_mipmaps&&tex_file_header.mipmaps<=1) 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->usage|=VK_IMAGE_USAGE_TRANSFER_SRC_BIT;
tci->SetAutoMipmaps(); tci->SetAutoMipmaps();