use VAB instead VertexAttribBuffer.

use VAD instead VertexAttribData.
This commit is contained in:
hyzboy 2020-08-07 21:59:20 +08:00
parent 1964e5da04
commit d26b59cb1d
23 changed files with 79 additions and 58 deletions

2
CMCore

@ -1 +1 @@
Subproject commit c826b3d8e5c0cb77f10729ce81bb388313094a5e
Subproject commit 4c22ba5a6066bd60badb65b6ce745562664c1705

View File

@ -45,8 +45,8 @@ private:
vulkan::Pipeline * pipeline =nullptr;
vulkan::VertexAttribBuffer *vertex_buffer =nullptr;
vulkan::VertexAttribBuffer *tex_coord_buffer =nullptr;
vulkan::VAB *vertex_buffer =nullptr;
vulkan::VAB *tex_coord_buffer =nullptr;
public:

View File

@ -36,7 +36,7 @@ private:
vulkan::Pipeline * pipeline =nullptr;
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
vulkan::VAB * vertex_buffer =nullptr;
public:

View File

@ -69,8 +69,8 @@ private:
vulkan::Sampler * sampler_linear =nullptr;
vulkan::Sampler * sampler_nearest =nullptr;
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
vulkan::VertexAttribBuffer * tex_coord_buffer =nullptr;
vulkan::VAB * vertex_buffer =nullptr;
vulkan::VAB * tex_coord_buffer =nullptr;
vulkan::IndexBuffer * index_buffer =nullptr;
SceneNode render_root;

View File

@ -36,7 +36,7 @@ vulkan::Renderable *CreateMeshRenderable(SceneDB *db,vulkan::Material *mtl,const
if(vertex_binding==-1)
return(nullptr);
vulkan::VertexAttribBuffer *vbo=db->CreateVAB(FMT_RGB32F,mesh->vertex_count,mesh->position);
vulkan::VAB *vbo=db->CreateVAB(FMT_RGB32F,mesh->vertex_count,mesh->position);
render_obj=mtl->CreateRenderable();
render_obj->Set(vertex_binding,vbo);
@ -47,7 +47,7 @@ vulkan::Renderable *CreateMeshRenderable(SceneDB *db,vulkan::Material *mtl,const
if(normal_binding!=-1)
{
vulkan::VertexAttribBuffer *vbo=db->CreateVAB(FMT_RGB32F,mesh->vertex_count,mesh->normal);
vulkan::VAB *vbo=db->CreateVAB(FMT_RGB32F,mesh->vertex_count,mesh->normal);
render_obj->Set(normal_binding,vbo);
}
@ -56,7 +56,7 @@ vulkan::Renderable *CreateMeshRenderable(SceneDB *db,vulkan::Material *mtl,const
if(tagent_binding!=-1)
{
vulkan::VertexAttribBuffer *vbo=db->CreateVAB(FMT_RGB32F,mesh->vertex_count,mesh->tangent);
vulkan::VAB *vbo=db->CreateVAB(FMT_RGB32F,mesh->vertex_count,mesh->tangent);
render_obj->Set(tagent_binding,vbo);
}
@ -65,7 +65,7 @@ vulkan::Renderable *CreateMeshRenderable(SceneDB *db,vulkan::Material *mtl,const
if(bitagent_binding!=-1)
{
vulkan::VertexAttribBuffer *vbo=db->CreateVAB(FMT_RGB32F,mesh->vertex_count,mesh->bitangent);
vulkan::VAB *vbo=db->CreateVAB(FMT_RGB32F,mesh->vertex_count,mesh->bitangent);
render_obj->Set(bitagent_binding,vbo);
}

View File

@ -45,8 +45,8 @@ private:
vulkan::Pipeline * pipeline =nullptr;
vulkan::VertexAttribBuffer *vertex_buffer =nullptr;
vulkan::VertexAttribBuffer *tex_coord_buffer =nullptr;
vulkan::VAB *vertex_buffer =nullptr;
vulkan::VAB *tex_coord_buffer =nullptr;
private:

View File

@ -42,8 +42,8 @@ private:
vulkan::Pipeline * pipeline =nullptr;
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
vulkan::VertexAttribBuffer * color_buffer =nullptr;
vulkan::VAB * vertex_buffer =nullptr;
vulkan::VAB * color_buffer =nullptr;
public:

View File

@ -47,7 +47,7 @@ private:
vulkan::Pipeline * pipeline =nullptr;
vulkan::VertexAttribBuffer *vertex_buffer =nullptr;
vulkan::VAB *vertex_buffer =nullptr;
vulkan::IndexBuffer * index_buffer =nullptr;
public:

View File

@ -57,8 +57,8 @@ private:
vulkan::Pipeline * pipeline =nullptr;
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
vulkan::VertexAttribBuffer * tex_coord_buffer =nullptr;
vulkan::VAB * vertex_buffer =nullptr;
vulkan::VAB * tex_coord_buffer =nullptr;
vulkan::IndexBuffer * index_buffer =nullptr;
public:

View File

@ -64,9 +64,9 @@ namespace hgl
public: //Create
vulkan::VertexAttribBuffer *CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
vulkan::VertexAttribBuffer *CreateVAB(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(format,count,nullptr,sharing_mode);}
vulkan::VertexAttribBuffer *CreateVAB(const VertexAttribData *vad,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(vad->GetVulkanFormat(),vad->GetCount(),vad->GetData(),sharing_mode);}
vulkan::VAB *CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
vulkan::VAB *CreateVAB(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(format,count,nullptr,sharing_mode);}
vulkan::VAB *CreateVAB(const VAD *vad,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(vad->GetVulkanFormat(),vad->GetCount(),vad->GetData(),sharing_mode);}
#define SCENE_DB_CREATE_FUNC(name) vulkan::Buffer *Create##name(VkDeviceSize size,void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); \
vulkan::Buffer *Create##name(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);

View File

@ -52,7 +52,8 @@ namespace hgl
* @param vecsize vec数量
* @param vertex_count
*/
VertexAttribData *CreateVertexAttribData(const vulkan::BaseType base_type,const uint32_t vecsize,const uint32_t vertex_count);
VAD *CreateVertexAttribData(const vulkan::BaseType base_type,const uint32_t vecsize,const uint32_t vertex_count);
//这个函数比较重要就不搞成CreateVAD的简写了
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_VERTEX_ATTRIB_DATA_INCLUDE

View File

@ -130,7 +130,7 @@ namespace hgl
static VkFormat GetVulkanFormat(){return VKFMT;}
static VertexAttribDataAccess1<T,VKFMT> * Create(VertexAttribData *vad)
static VertexAttribDataAccess1<T,VKFMT> * Create(VAD *vad)
{
if(!vad)return(nullptr);
@ -223,7 +223,7 @@ namespace hgl
static VkFormat GetVulkanFormat(){return VKFMT;}
static VertexAttribDataAccess2<T,VKFMT> * Create(VertexAttribData *vad)
static VertexAttribDataAccess2<T,VKFMT> * Create(VAD *vad)
{
if(!vad)return(nullptr);
@ -522,7 +522,7 @@ namespace hgl
static VkFormat GetVulkanFormat(){return VKFMT;}
static VertexAttribDataAccess3<T,VKFMT> * Create(VertexAttribData *vad)
static VertexAttribDataAccess3<T,VKFMT> * Create(VAD *vad)
{
if(!vad)return(nullptr);
@ -794,7 +794,7 @@ namespace hgl
static VkFormat GetVulkanFormat(){return VKFMT;}
static VertexAttribDataAccess4<T,VKFMT> * Create(VertexAttribData *vad)
static VertexAttribDataAccess4<T,VKFMT> * Create(VAD *vad)
{
if(!vad)return(nullptr);

View File

@ -6,9 +6,26 @@ namespace hgl
{
namespace graph
{
/**
*
*/
class TextRenderable:public vulkan::Renderable
{
};//
vulkan::Renderable * render_obj;
uint32 max_count; ///<缓冲区最大容量
uint32 cur_count; ///<当前容量
vulkan::VertexAttribBuffer *vertex_buffer;
vulkan::VertexAttribBuffer *tex_coord_buffer;
public:
TextRenderable();
virtual ~TextRenderable();
};//class TextRenderable:public vulkan::Renderable
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_TEXT_RENDERABLE_INCLUDE

View File

@ -36,7 +36,10 @@ class Sampler;
class Memory;
class Buffer;
struct BufferData;
class VertexAttribBuffer;
using VAB=VertexAttribBuffer;
class IndexBuffer;
class CommandBuffer;

View File

@ -82,6 +82,7 @@ public:
public: //内存相关
Memory *CreateMemory(const VkMemoryRequirements &,const uint32_t properties);
Memory *CreateMemory(VkImage,const uint32 flag=VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
private: //Buffer相关
@ -92,9 +93,9 @@ public: //Buffer相关
Buffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,const void *data, VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
Buffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size, VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateBuffer(buf_usage,size,nullptr,sharing_mode);}
VertexAttribBuffer *CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
VertexAttribBuffer *CreateVAB(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(format,count,nullptr,sharing_mode);}
VertexAttribBuffer *CreateVAB(const VertexAttribData *vad,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(vad->GetVulkanFormat(),vad->GetCount(),vad->GetData(),sharing_mode);}
VAB * CreateVAB (VkFormat format,uint32_t count,const void *data, VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
VAB * CreateVAB (VkFormat format,uint32_t count, VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(format,count,nullptr,sharing_mode);}
VAB * CreateVAB (const VAD *vad, VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(vad->GetVulkanFormat(),vad->GetCount(),vad->GetData(),sharing_mode);}
IndexBuffer * CreateIBO (VkIndexType index_type,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
IndexBuffer * CreateIBO16 ( uint32_t count,const uint16 *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT16,count,(void *)data,sharing_mode);}
@ -120,12 +121,11 @@ public: //Image
VkImage CreateImage2D (const VkFormat format,const uint32_t width,const uint32_t height, const uint usage,const VkImageTiling tiling);
VkImage CreateImage2DArray (const VkFormat format,const uint32_t width,const uint32_t height,const uint32_t layer, const uint usage,const VkImageTiling tiling);
VkImage CreateImage3D (const VkFormat format,const uint32_t width,const uint32_t height,const uint32_t depth, const uint usage,const VkImageTiling tiling);
VkImage CreateImageCubemap (const VkFormat format,const uint32_t width,const uint32_t height,const uint usage,const VkImageTiling tiling);
VkImage CreateCubemap (const VkFormat format,const uint32_t width,const uint32_t height, const uint usage,const VkImageTiling tiling);
// VkImage CreateCubemapArray (const VkFormat format,const uint32_t width,const uint32_t height,const uint32_t count, const uint usage,const VkImageTiling tiling);
void DestoryImage (VkImage);
Memory *CreateMemory(VkImage,const uint32 flag=VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
public: //Texture
Texture2D *CreateTexture2D(Memory *mem,VkImage image,ImageView *image_view,VkImageLayout image_layout,VkImageTiling tiling);

View File

@ -47,8 +47,8 @@ public:
void SetBoundingBox(const AABB &aabb){BoundingBox=aabb;}
const AABB &GetBoundingBox()const {return BoundingBox;}
bool Set(const int stage_input_binding, VertexAttribBuffer *vb,VkDeviceSize offset=0);
bool Set(const AnsiString &name, VertexAttribBuffer *vb,VkDeviceSize offset=0);
bool Set(const int stage_input_binding, VAB *vb,VkDeviceSize offset=0);
bool Set(const AnsiString &name, VAB *vb,VkDeviceSize offset=0);
bool Set(IndexBuffer *ib,VkDeviceSize offset=0)
{

View File

@ -44,7 +44,7 @@ bool Device::CreateBuffer(BufferData *buf,VkBufferUsageFlags buf_usage,VkDeviceS
return(false);
}
VertexAttribBuffer *Device::CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
VAB *Device::CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
{
const uint32_t stride=GetStrideByFormat(format);

View File

@ -183,7 +183,7 @@ VkImage Device::CreateImage3D(const VkFormat format,const uint32_t width,const u
return image;
}
VkImage Device::CreateImageCubemap(const VkFormat format,const uint32_t width,const uint32_t height,const uint usage,const VkImageTiling tiling)
VkImage Device::CreateCubemap(const VkFormat format,const uint32_t width,const uint32_t height,const uint usage,const VkImageTiling tiling)
{
if(!CheckVulkanFormat(format))return(nullptr);
if(width<1||height<1)return(nullptr);

View File

@ -20,7 +20,7 @@ Renderable::~Renderable()
delete[] buf_list;
}
bool Renderable::Set(const int stage_input_binding,VertexAttribBuffer *vab,VkDeviceSize offset)
bool Renderable::Set(const int stage_input_binding,VAB *vab,VkDeviceSize offset)
{
if(stage_input_binding<0||stage_input_binding>=buf_count||!vab)return(false);
@ -38,7 +38,7 @@ bool Renderable::Set(const int stage_input_binding,VertexAttribBuffer *vab,VkDev
return(true);
}
bool Renderable::Set(const AnsiString &name,VertexAttribBuffer *vab,VkDeviceSize offset)
bool Renderable::Set(const AnsiString &name,VAB *vab,VkDeviceSize offset)
{
return Set(vertex_sm->GetStageInputBinding(name),vab,offset);
}

View File

@ -8,7 +8,7 @@ namespace
void AnalyseSize(uint &fw,uint &fh,const uint w,const uint h,const uint count,const uint32_t max_texture_size)
{
int total,tw,th,t;
uint total,tw,th,t;
fw=fh=0;

View File

@ -46,7 +46,7 @@ namespace hgl
return ssb->data;
}
VertexAttribData *RenderableCreater::CreateVAD(const AnsiString &name)
VAD *RenderableCreater::CreateVAD(const AnsiString &name)
{
if(!vsm)return(nullptr);
if(name.IsEmpty())return(nullptr);

View File

@ -6,9 +6,9 @@ namespace hgl
{
namespace graph
{
vulkan::VertexAttribBuffer *SceneDB::CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
vulkan::VAB *SceneDB::CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
{
vulkan::VertexAttribBuffer *vb=device->CreateVAB(format,count,data,sharing_mode);
vulkan::VAB *vb=device->CreateVAB(format,count,data,sharing_mode);
if(!vb)
return(nullptr);

View File

@ -4,7 +4,7 @@ namespace hgl
{
namespace graph
{
VertexAttribData *CreateVertexAttribData(const vulkan::BaseType base_type,const uint32_t vecsize,const uint32_t vertex_count)
VAD *CreateVertexAttribData(const vulkan::BaseType base_type,const uint32_t vecsize,const uint32_t vertex_count)
{
VkFormat fmt;
uint32_t stride;