added little codes of texture 2d array, but can't run.

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-09-25 16:38:02 +08:00
parent f901708b6c
commit 5230fbc27f
9 changed files with 53 additions and 13 deletions

@ -1 +1 @@
Subproject commit e37055e34e72ab5723a350037ec216ca7ee12cfb Subproject commit 28e59c2777ed5e0535ec0ba6b77577aa3a9b148f

View File

@ -207,7 +207,7 @@ namespace hgl
{ {
protected: // override functions protected: // override functions
uint32 GetPixelsCount()const override{return file_header.length;} uint32 GetPixelsCount()const override{return file_header.length*file_header.layers;}
uint32 GetTotalBytes()const override uint32 GetTotalBytes()const override
{ {
if(file_header.mipmaps<=1) if(file_header.mipmaps<=1)
@ -230,7 +230,7 @@ namespace hgl
{ {
protected: // override functions protected: // override functions
uint32 GetPixelsCount()const override{return file_header.width*file_header.height;} uint32 GetPixelsCount()const override{return file_header.width*file_header.height*file_header.layers;}
uint32 GetTotalBytes()const override uint32 GetTotalBytes()const override
{ {
if(file_header.mipmaps<=1) if(file_header.mipmaps<=1)

View File

@ -180,6 +180,9 @@ public: //Texture
Texture2D *CreateTexture2D(TextureData *); Texture2D *CreateTexture2D(TextureData *);
Texture2D *CreateTexture2D(TextureCreateInfo *ci); Texture2D *CreateTexture2D(TextureCreateInfo *ci);
Texture2DArray *CreateTexture2DArray(TextureData *);
Texture2DArray *CreateTexture2DArray(TextureCreateInfo *ci);
TextureCube *CreateTextureCube(TextureData *); TextureCube *CreateTextureCube(TextureData *);
TextureCube *CreateTextureCube(TextureCreateInfo *ci); TextureCube *CreateTextureCube(TextureCreateInfo *ci);

View File

@ -63,8 +63,8 @@ class Texture2D:public Texture
{ {
public: public:
Texture2D(VkDevice dev,TextureData *td):Texture(dev,td){} using Texture::Texture;
~Texture2D()=default; virtual ~Texture2D()=default;
static VkImageViewType GetImageViewType(){return VK_IMAGE_VIEW_TYPE_2D;} static VkImageViewType GetImageViewType(){return VK_IMAGE_VIEW_TYPE_2D;}
@ -72,10 +72,19 @@ public:
const uint32_t GetHeight()const{return data?data->image_view->GetExtent().height:0;} const uint32_t GetHeight()const{return data?data->image_view->GetExtent().height:0;}
};//class Texture2D:public Texture };//class Texture2D:public Texture
//class Texture2DArray:public Texture class Texture2DArray:public Texture
//{ {
// uint32_t width,height,count; public:
//};//class Texture2DArray:public Texture
using Texture::Texture;
virtual ~Texture2DArray()=default;
static VkImageViewType GetImageViewType(){return VK_IMAGE_VIEW_TYPE_2D_ARRAY;}
const uint32_t GetWidth ()const{return data?data->image_view->GetExtent().width:0;}
const uint32_t GetHeight()const{return data?data->image_view->GetExtent().height:0;}
const uint32_t GetLayer ()const{return data?data->image_view->GetExtent().depth:0;}
};//class Texture2DArray:public Texture
//class Texture3D:public Texture //class Texture3D:public Texture
//{ //{

View File

@ -20,13 +20,13 @@ struct TextureCreateInfo
VkImageLayout image_layout; VkImageLayout image_layout;
VkImage image; //如果没有IMAGE则创建。交换链等会直接提供image所以存在外部传入现像) VkImage image; //如果没有IMAGE则创建。交换链等会直接提供image所以存在外部传入现像)
DeviceMemory * memory; //同时需分配内存并绑定 DeviceMemory * memory; //同时需分配内存并绑定
ImageView * image_view; //如果没有imageview则创建 ImageView * image_view; //如果没有imageview则创建
void * pixels; //如果没有buffer但有pixels则根据pixels和以上条件创建buffer void * pixels; //如果没有buffer但有pixels则根据pixels和以上条件创建buffer
VkDeviceSize total_bytes; VkDeviceSize total_bytes;
DeviceBuffer * buffer; //如果pixels也没有则代表不会立即写入图像数据 DeviceBuffer * buffer; //如果pixels也没有则代表不会立即写入图像数据
public: public:

View File

@ -127,11 +127,13 @@ SET(VK_DEVICE_TEXTURE_SOURCE Vulkan/Texture/BufferImageCopy2D.h
Vulkan/Texture/GenMipmaps.cpp Vulkan/Texture/GenMipmaps.cpp
Vulkan/Texture/VKDeviceTexture.cpp Vulkan/Texture/VKDeviceTexture.cpp
Vulkan/Texture/VKDeviceTexture2D.cpp Vulkan/Texture/VKDeviceTexture2D.cpp
Vulkan/Texture/VKDeviceTexture2DArray.cpp
Vulkan/Texture/VKDeviceTextureCube.cpp) Vulkan/Texture/VKDeviceTextureCube.cpp)
SET(VK_TEXTURE_LOADER_SOURCE ${SG_INCLUDE_PATH}/VKTextureCreateInfo.h SET(VK_TEXTURE_LOADER_SOURCE ${SG_INCLUDE_PATH}/VKTextureCreateInfo.h
Vulkan/Texture/VKTextureLoader.h Vulkan/Texture/VKTextureLoader.h
Vulkan/Texture/VKTexture2DLoader.cpp Vulkan/Texture/VKTexture2DLoader.cpp
Vulkan/Texture/VKTexture2DArrayLoader.cpp
Vulkan/Texture/VKTextureCubeLoader.cpp) Vulkan/Texture/VKTextureCubeLoader.cpp)
SET(VK_DEVICE_CREATER_SOURCE ${SG_INCLUDE_PATH}/VKDevice.h SET(VK_DEVICE_CREATER_SOURCE ${SG_INCLUDE_PATH}/VKDevice.h

View File

@ -95,8 +95,6 @@ bool GPUDevice::CommitTexture2D(Texture2D *tex,DeviceBuffer *buf,VkPipelineStage
BufferImageCopy buffer_image_copy(tex); BufferImageCopy buffer_image_copy(tex);
//CopyBufferToImageInfo info(tex,buf->GetBuffer(),&buffer_image_copy);
return CopyBufferToImage(tex,buf,&buffer_image_copy,destinationStage); return CopyBufferToImage(tex,buf,&buffer_image_copy,destinationStage);
} }

View File

@ -0,0 +1,27 @@
#include"VKTextureLoader.h"
#include<hgl/io/FileInputStream.h>
#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<> Texture2DArray *VkTextureLoader<Texture2DArray,Texture2DArrayLoader>::OnCreateTexture(TextureCreateInfo *tci)
{
return device->CreateTexture2DArray(tci);
}
Texture2DArray *CreateTexture2DArrayFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps)
{
VkTextureLoader<Texture2DArray,Texture2DArrayLoader> loader(device,auto_mipmaps);
if(!loader.Load(filename))
return(nullptr);
return loader.GetTexture();
}
VK_NAMESPACE_END

View File

@ -118,6 +118,7 @@ Sampler *RenderResource::CreateSampler(Texture *tex)
} }
Texture2D *CreateTexture2DFromFile(GPUDevice *device,const OSString &filename,bool auto_mipmaps); 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) Texture2D *RenderResource::LoadTexture2D(const OSString &filename,bool auto_mipmaps)
{ {