LoadTexture2DToArray OK! test ok!

This commit is contained in:
2023-09-25 20:32:12 +08:00
parent 65c3d5cad1
commit 9a7e711658
10 changed files with 327 additions and 19 deletions

View File

@@ -37,9 +37,11 @@ public:
}
template<typename T>
BufferImageCopy(const Texture2DArray *tex,const RectScope2<T> &rs):BufferImageCopy()
BufferImageCopy(const Texture2DArray *tex,const RectScope2<T> &rs,const uint32_t bl,const uint32_t lc):BufferImageCopy()
{
imageSubresource.aspectMask=tex->GetAspect();
imageSubresource.aspectMask =tex->GetAspect();
imageSubresource.baseArrayLayer =bl;
imageSubresource.layerCount =lc;
SetRectScope(rs);
}

View File

@@ -215,7 +215,7 @@ bool GPUDevice::ChangeTexture2DArray(Texture2DArray *tex,DeviceBuffer *buf,const
||scope.GetBottom()>tex->GetHeight())
return(false);
BufferImageCopy buffer_image_copy(tex,scope);
BufferImageCopy buffer_image_copy(tex,scope,base_layer,layer_count);
texture_cmd_buf->Begin();
bool result=CopyBufferToImage(tex,buf,&buffer_image_copy,1,base_layer,layer_count,destinationStage);

View File

@@ -3,25 +3,36 @@
#include<hgl/log/LogInfo.h>
VK_NAMESPACE_BEGIN
template<> void VkTextureLoader<Texture2DArray,Texture2DArrayLoader>::OnExtent(VkExtent3D &extent)
{
extent.width =file_header.width;
extent.height =file_header.height;
extent.depth =file_header.layers;
}
//template<> void VkTextureLoader<Texture2DArray,Texture2DArrayLoader>::OnExtent(VkExtent3D &extent)
//{
// extent.width =file_header.width;
// extent.height =file_header.height;
// extent.depth =file_header.layers;
//}
//
//template<> Texture2DArray *VkTextureLoader<Texture2DArray,Texture2DArrayLoader>::OnCreateTexture(TextureCreateInfo *tci)
//{
// return device->CreateTexture2DArray(tci);
//}
template<> Texture2DArray *VkTextureLoader<Texture2DArray,Texture2DArrayLoader>::OnCreateTexture(TextureCreateInfo *tci)
bool LoadTexture2DLayerFromFile(GPUDevice *device,Texture2DArray *ta,const uint32_t layer,const OSString &filename,bool auto_mipmaps)
{
return device->CreateTexture2DArray(tci);
}
Texture2DArray *CreateTexture2DArrayFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps)
{
VkTextureLoader<Texture2DArray,Texture2DArrayLoader> loader(device,auto_mipmaps);
//注依然是Texture2D则非Texture2DArray。因为这里LOAD的是2D纹理并不是2DArray纹理
VkTextureLoader<Texture2D,Texture2DLoader> loader(device,auto_mipmaps);
if(!loader.Load(filename))
return(nullptr);
return loader.CreateTexture();
DeviceBuffer *buf=loader.GetBuffer();
if(!buf)
return(false);
RectScope2ui scope;
scope.Width=ta->GetWidth();
scope.Height=ta->GetHeight();
return device->ChangeTexture2DArray(ta,buf,scope,layer,1);
}
VK_NAMESPACE_END

View File

@@ -59,6 +59,8 @@ public:
return(true);
}
DeviceBuffer *GetBuffer(){return buf;}
T *CreateTexture()
{
TextureCreateInfo *tci=new TextureCreateInfo(format);

View File

@@ -118,7 +118,6 @@ Sampler *RenderResource::CreateSampler(Texture *tex)
}
Texture2D *CreateTexture2DFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps);
Texture2DArray *CreateTexture2DArrayFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps);
Texture2D *RenderResource::LoadTexture2D(const OSString &filename,bool auto_mipmaps)
{
@@ -148,6 +147,18 @@ Texture2D *RenderResource::LoadTexture2D(const OSString &filename,bool auto_mipm
return tex;
}
bool LoadTexture2DLayerFromFile(GPUDevice *device,Texture2DArray *t2d,const uint32_t layer,const OSString &filename,bool auto_mipmaps);
bool RenderResource::LoadTexture2DToArray(Texture2DArray *ta,const uint32_t layer,const OSString &filename)
{
if(!ta)return(false);
if(!LoadTexture2DLayerFromFile(device,ta,layer,filename,false))
return(false);
return(true);
}
TextureCube *CreateTextureCubeFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps);
TextureCube *RenderResource::LoadTextureCube(const OSString &filename,bool auto_mipmaps)