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;
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 *);

View File

@ -1,6 +1,8 @@
#include"VKTextureLoader.h"
#include<hgl/io/FileInputStream.h>
#include<hgl/log/LogInfo.h>
#include<hgl/graph/VKTexture.h>
#include<hgl/graph/manager/TextureManager.h>
VK_NAMESPACE_BEGIN
//template<> void VkTextureLoader<Texture2DArray,Texture2DArrayLoader>::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<Texture2D,Texture2DLoader> loader(device,auto_mipmaps);
VkTextureLoader<Texture2D,Texture2DLoader> 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

View File

@ -12,12 +12,15 @@ template<> void VkTextureLoader<Texture2D,Texture2DLoader>::OnExtent(VkExtent3D
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))
return(nullptr);

View File

@ -12,12 +12,15 @@ template<> void VkTextureLoader<TextureCube,TextureCubeLoader>::OnExtent(VkExten
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))
return(nullptr);

View File

@ -1,8 +1,8 @@
#pragma once
#include<hgl/graph/VK.h>
#include<hgl/graph/VKDevice.h>
#include<hgl/graph/VKBuffer.h>
#include<hgl/graph/VKTexture.h>
#include<hgl/graph/TextureLoader.h>
#include<hgl/graph/manager/TextureManager.h>
#include<hgl/graph/VKTextureCreateInfo.h>
VK_NAMESPACE_BEGIN
@ -10,7 +10,7 @@ template<typename T,typename TL> 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();