added little codes of texture 2d array, but can't run.
This commit is contained in:
parent
f901708b6c
commit
5230fbc27f
@ -1 +1 @@
|
||||
Subproject commit e37055e34e72ab5723a350037ec216ca7ee12cfb
|
||||
Subproject commit 28e59c2777ed5e0535ec0ba6b77577aa3a9b148f
|
@ -207,7 +207,7 @@ namespace hgl
|
||||
{
|
||||
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
|
||||
{
|
||||
if(file_header.mipmaps<=1)
|
||||
@ -230,7 +230,7 @@ namespace hgl
|
||||
{
|
||||
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
|
||||
{
|
||||
if(file_header.mipmaps<=1)
|
||||
|
@ -180,6 +180,9 @@ public: //Texture
|
||||
Texture2D *CreateTexture2D(TextureData *);
|
||||
Texture2D *CreateTexture2D(TextureCreateInfo *ci);
|
||||
|
||||
Texture2DArray *CreateTexture2DArray(TextureData *);
|
||||
Texture2DArray *CreateTexture2DArray(TextureCreateInfo *ci);
|
||||
|
||||
TextureCube *CreateTextureCube(TextureData *);
|
||||
TextureCube *CreateTextureCube(TextureCreateInfo *ci);
|
||||
|
||||
|
@ -63,8 +63,8 @@ class Texture2D:public Texture
|
||||
{
|
||||
public:
|
||||
|
||||
Texture2D(VkDevice dev,TextureData *td):Texture(dev,td){}
|
||||
~Texture2D()=default;
|
||||
using Texture::Texture;
|
||||
virtual ~Texture2D()=default;
|
||||
|
||||
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;}
|
||||
};//class Texture2D:public Texture
|
||||
|
||||
//class Texture2DArray:public Texture
|
||||
//{
|
||||
// uint32_t width,height,count;
|
||||
//};//class Texture2DArray:public Texture
|
||||
class Texture2DArray:public Texture
|
||||
{
|
||||
public:
|
||||
|
||||
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
|
||||
//{
|
||||
|
@ -20,13 +20,13 @@ struct TextureCreateInfo
|
||||
VkImageLayout image_layout;
|
||||
|
||||
VkImage image; //如果没有IMAGE,则创建。(交换链等会直接提供image,所以存在外部传入现像)
|
||||
DeviceMemory * memory; //同时需分配内存并绑定
|
||||
DeviceMemory * memory; //同时需分配内存并绑定
|
||||
|
||||
ImageView * image_view; //如果没有imageview,则创建
|
||||
|
||||
void * pixels; //如果没有buffer但有pixels,则根据pixels和以上条件创建buffer
|
||||
VkDeviceSize total_bytes;
|
||||
DeviceBuffer * buffer; //如果pixels也没有,则代表不会立即写入图像数据
|
||||
DeviceBuffer * buffer; //如果pixels也没有,则代表不会立即写入图像数据
|
||||
|
||||
public:
|
||||
|
||||
|
@ -127,11 +127,13 @@ SET(VK_DEVICE_TEXTURE_SOURCE Vulkan/Texture/BufferImageCopy2D.h
|
||||
Vulkan/Texture/GenMipmaps.cpp
|
||||
Vulkan/Texture/VKDeviceTexture.cpp
|
||||
Vulkan/Texture/VKDeviceTexture2D.cpp
|
||||
Vulkan/Texture/VKDeviceTexture2DArray.cpp
|
||||
Vulkan/Texture/VKDeviceTextureCube.cpp)
|
||||
|
||||
SET(VK_TEXTURE_LOADER_SOURCE ${SG_INCLUDE_PATH}/VKTextureCreateInfo.h
|
||||
Vulkan/Texture/VKTextureLoader.h
|
||||
Vulkan/Texture/VKTexture2DLoader.cpp
|
||||
Vulkan/Texture/VKTexture2DArrayLoader.cpp
|
||||
Vulkan/Texture/VKTextureCubeLoader.cpp)
|
||||
|
||||
SET(VK_DEVICE_CREATER_SOURCE ${SG_INCLUDE_PATH}/VKDevice.h
|
||||
|
@ -95,8 +95,6 @@ bool GPUDevice::CommitTexture2D(Texture2D *tex,DeviceBuffer *buf,VkPipelineStage
|
||||
|
||||
BufferImageCopy buffer_image_copy(tex);
|
||||
|
||||
//CopyBufferToImageInfo info(tex,buf->GetBuffer(),&buffer_image_copy);
|
||||
|
||||
return CopyBufferToImage(tex,buf,&buffer_image_copy,destinationStage);
|
||||
}
|
||||
|
||||
|
27
src/SceneGraph/Vulkan/Texture/VKTexture2DArrayLoader.cpp
Normal file
27
src/SceneGraph/Vulkan/Texture/VKTexture2DArrayLoader.cpp
Normal 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
|
@ -118,6 +118,7 @@ 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)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user