rename "VertexBuffer" to "VertexAttribBuffer"
This commit is contained in:
parent
e9eda440a9
commit
9e99db9c72
@ -32,8 +32,8 @@ private:
|
|||||||
|
|
||||||
vulkan::Pipeline * pipeline =nullptr;
|
vulkan::Pipeline * pipeline =nullptr;
|
||||||
|
|
||||||
vulkan::VertexBuffer * vertex_buffer =nullptr;
|
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
|
||||||
vulkan::VertexBuffer * tex_coord_buffer =nullptr;
|
vulkan::VertexAttribBuffer * tex_coord_buffer =nullptr;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ private:
|
|||||||
|
|
||||||
vulkan::Pipeline * pipeline =nullptr;
|
vulkan::Pipeline * pipeline =nullptr;
|
||||||
|
|
||||||
vulkan::VertexBuffer * vertex_buffer =nullptr;
|
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -69,8 +69,8 @@ private:
|
|||||||
vulkan::Sampler * sampler_linear =nullptr;
|
vulkan::Sampler * sampler_linear =nullptr;
|
||||||
vulkan::Sampler * sampler_nearest =nullptr;
|
vulkan::Sampler * sampler_nearest =nullptr;
|
||||||
|
|
||||||
vulkan::VertexBuffer * vertex_buffer =nullptr;
|
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
|
||||||
vulkan::VertexBuffer * tex_coord_buffer =nullptr;
|
vulkan::VertexAttribBuffer * tex_coord_buffer =nullptr;
|
||||||
vulkan::IndexBuffer * index_buffer =nullptr;
|
vulkan::IndexBuffer * index_buffer =nullptr;
|
||||||
|
|
||||||
SceneNode render_root;
|
SceneNode render_root;
|
||||||
|
@ -36,7 +36,7 @@ vulkan::Renderable *CreateMeshRenderable(SceneDB *db,vulkan::Material *mtl,const
|
|||||||
if(vertex_binding==-1)
|
if(vertex_binding==-1)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
vulkan::VertexBuffer *vbo=db->CreateVBO(FMT_RGB32F,mesh->vertex_count,mesh->position);
|
vulkan::VertexAttribBuffer *vbo=db->CreateVBO(FMT_RGB32F,mesh->vertex_count,mesh->position);
|
||||||
|
|
||||||
render_obj=mtl->CreateRenderable();
|
render_obj=mtl->CreateRenderable();
|
||||||
render_obj->Set(vertex_binding,vbo);
|
render_obj->Set(vertex_binding,vbo);
|
||||||
@ -47,7 +47,7 @@ vulkan::Renderable *CreateMeshRenderable(SceneDB *db,vulkan::Material *mtl,const
|
|||||||
|
|
||||||
if(normal_binding!=-1)
|
if(normal_binding!=-1)
|
||||||
{
|
{
|
||||||
vulkan::VertexBuffer *vbo=db->CreateVBO(FMT_RGB32F,mesh->vertex_count,mesh->normal);
|
vulkan::VertexAttribBuffer *vbo=db->CreateVBO(FMT_RGB32F,mesh->vertex_count,mesh->normal);
|
||||||
|
|
||||||
render_obj->Set(normal_binding,vbo);
|
render_obj->Set(normal_binding,vbo);
|
||||||
}
|
}
|
||||||
@ -56,7 +56,7 @@ vulkan::Renderable *CreateMeshRenderable(SceneDB *db,vulkan::Material *mtl,const
|
|||||||
|
|
||||||
if(tagent_binding!=-1)
|
if(tagent_binding!=-1)
|
||||||
{
|
{
|
||||||
vulkan::VertexBuffer *vbo=db->CreateVBO(FMT_RGB32F,mesh->vertex_count,mesh->tangent);
|
vulkan::VertexAttribBuffer *vbo=db->CreateVBO(FMT_RGB32F,mesh->vertex_count,mesh->tangent);
|
||||||
|
|
||||||
render_obj->Set(tagent_binding,vbo);
|
render_obj->Set(tagent_binding,vbo);
|
||||||
}
|
}
|
||||||
@ -65,7 +65,7 @@ vulkan::Renderable *CreateMeshRenderable(SceneDB *db,vulkan::Material *mtl,const
|
|||||||
|
|
||||||
if(bitagent_binding!=-1)
|
if(bitagent_binding!=-1)
|
||||||
{
|
{
|
||||||
vulkan::VertexBuffer *vbo=db->CreateVBO(FMT_RGB32F,mesh->vertex_count,mesh->bitangent);
|
vulkan::VertexAttribBuffer *vbo=db->CreateVBO(FMT_RGB32F,mesh->vertex_count,mesh->bitangent);
|
||||||
|
|
||||||
render_obj->Set(bitagent_binding,vbo);
|
render_obj->Set(bitagent_binding,vbo);
|
||||||
}
|
}
|
||||||
|
@ -45,8 +45,8 @@ private:
|
|||||||
|
|
||||||
vulkan::Pipeline * pipeline =nullptr;
|
vulkan::Pipeline * pipeline =nullptr;
|
||||||
|
|
||||||
vulkan::VertexBuffer * vertex_buffer =nullptr;
|
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
|
||||||
vulkan::VertexBuffer * tex_coord_buffer =nullptr;
|
vulkan::VertexAttribBuffer * tex_coord_buffer =nullptr;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -42,8 +42,8 @@ private:
|
|||||||
|
|
||||||
vulkan::Pipeline * pipeline =nullptr;
|
vulkan::Pipeline * pipeline =nullptr;
|
||||||
|
|
||||||
vulkan::VertexBuffer * vertex_buffer =nullptr;
|
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
|
||||||
vulkan::VertexBuffer * color_buffer =nullptr;
|
vulkan::VertexAttribBuffer * color_buffer =nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ private:
|
|||||||
|
|
||||||
vulkan::Pipeline * pipeline =nullptr;
|
vulkan::Pipeline * pipeline =nullptr;
|
||||||
|
|
||||||
vulkan::VertexBuffer * vertex_buffer =nullptr;
|
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
|
||||||
vulkan::IndexBuffer * index_buffer =nullptr;
|
vulkan::IndexBuffer * index_buffer =nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -57,8 +57,8 @@ private:
|
|||||||
|
|
||||||
vulkan::Pipeline * pipeline =nullptr;
|
vulkan::Pipeline * pipeline =nullptr;
|
||||||
|
|
||||||
vulkan::VertexBuffer * vertex_buffer =nullptr;
|
vulkan::VertexAttribBuffer * vertex_buffer =nullptr;
|
||||||
vulkan::VertexBuffer * tex_coord_buffer =nullptr;
|
vulkan::VertexAttribBuffer * tex_coord_buffer =nullptr;
|
||||||
vulkan::IndexBuffer * index_buffer =nullptr;
|
vulkan::IndexBuffer * index_buffer =nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#define HGL_GRAPH_RENDERABLE_CREATER_INCLUDE
|
#define HGL_GRAPH_RENDERABLE_CREATER_INCLUDE
|
||||||
|
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/SceneDB.h>
|
||||||
#include<hgl/graph/VertexBuffer.h>
|
#include<hgl/graph/VertexAttribBuffer.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
namespace graph
|
namespace graph
|
||||||
@ -19,6 +19,8 @@ namespace hgl
|
|||||||
#undef VAN_DEFINE
|
#undef VAN_DEFINE
|
||||||
}//namespace VertexAttribName
|
}//namespace VertexAttribName
|
||||||
|
|
||||||
|
#define VAN VertexAttribName
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 可渲染对象创建器
|
* 可渲染对象创建器
|
||||||
*/
|
*/
|
||||||
@ -37,10 +39,10 @@ namespace hgl
|
|||||||
|
|
||||||
uint32 vertices_number;
|
uint32 vertices_number;
|
||||||
|
|
||||||
VertexBufferCreater * vb_vertex;
|
VertexAttribBufferCreater * vabc_vertex;
|
||||||
vulkan::IndexBuffer * ibo;
|
vulkan::IndexBuffer * ibo;
|
||||||
|
|
||||||
Map<AnsiString,VertexBufferCreater *> vb_map;
|
MapObject<AnsiString,VertexAttribBufferCreater> vabc_maps;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -49,13 +51,25 @@ namespace hgl
|
|||||||
|
|
||||||
virtual bool Init(const uint32 count);
|
virtual bool Init(const uint32 count);
|
||||||
|
|
||||||
virtual VertexBufferCreater * Bind(const AnsiString &name);
|
virtual VertexAttribBufferCreater * CreateVAB(const AnsiString &name);
|
||||||
|
|
||||||
|
#define PreDefineCreateVAB(name) \
|
||||||
|
virtual VertexAttribBufferCreater * Create##name##Buffer(){return CreateVAB(VAN::name));}
|
||||||
|
|
||||||
|
PreDefineCreateVAB(Vertex)
|
||||||
|
PreDefineCreateVAB(Normal)
|
||||||
|
PreDefineCreateVAB(Color)
|
||||||
|
PreDefineCreateVAB(Tangent)
|
||||||
|
PreDefineCreateVAB(Bitangent)
|
||||||
|
PreDefineCreateVAB(TexCoord)
|
||||||
|
|
||||||
|
#undef PreDefineCreateVAB
|
||||||
|
|
||||||
uint16 * CreateIBO16(uint count,const uint16 *data=nullptr);
|
uint16 * CreateIBO16(uint count,const uint16 *data=nullptr);
|
||||||
uint32 * CreateIBO32(uint count,const uint32 *data=nullptr);
|
uint32 * CreateIBO32(uint count,const uint32 *data=nullptr);
|
||||||
|
|
||||||
virtual vulkan::Renderable * Finish();
|
virtual vulkan::Renderable * Finish();
|
||||||
};//class GeometryCreater
|
};//class RenderableCreater
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
#endif//HGL_GRAPH_RENDERABLE_CREATER_INCLUDE
|
#endif//HGL_GRAPH_RENDERABLE_CREATER_INCLUDE
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include<hgl/graph/vulkan/VKSampler.h>
|
#include<hgl/graph/vulkan/VKSampler.h>
|
||||||
#include<hgl/graph/vulkan/VKTexture.h>
|
#include<hgl/graph/vulkan/VKTexture.h>
|
||||||
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
||||||
#include<hgl/graph/VertexBufferCreater.h>
|
#include<hgl/graph/VertexAttribBufferCreater.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
#include<hgl/type/ResManage.h>
|
#include<hgl/type/ResManage.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
@ -26,7 +26,7 @@ namespace hgl
|
|||||||
using SamplerID =int;
|
using SamplerID =int;
|
||||||
using TextureID =int;
|
using TextureID =int;
|
||||||
|
|
||||||
class VertexBufferCreater;
|
class VertexAttribBufferCreater;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 场景DB,用于管理场景内所需的所有数据
|
* 场景DB,用于管理场景内所需的所有数据
|
||||||
@ -64,9 +64,9 @@ namespace hgl
|
|||||||
|
|
||||||
public: //Create
|
public: //Create
|
||||||
|
|
||||||
vulkan::VertexBuffer *CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
vulkan::VertexAttribBuffer *CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
||||||
vulkan::VertexBuffer *CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(format,count,nullptr,sharing_mode);}
|
vulkan::VertexAttribBuffer *CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(format,count,nullptr,sharing_mode);}
|
||||||
vulkan::VertexBuffer *CreateVBO(const VertexBufferCreater *vbc,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(vbc->GetDataType(),vbc->GetCount(),vbc->GetData(),sharing_mode);}
|
vulkan::VertexAttribBuffer *CreateVBO(const VertexAttribBufferCreater *vbc,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(vbc->GetDataType(),vbc->GetCount(),vbc->GetData(),sharing_mode);}
|
||||||
|
|
||||||
#define SCENE_DB_CREATE_FUNC(name) vulkan::Buffer *Create##name(VkDeviceSize size,void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); \
|
#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);
|
vulkan::Buffer *Create##name(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#ifndef HGL_GRAPH_VERTEX_BUFFER_INCLUDE
|
#ifndef HGL_GRAPH_VERTEX_ATTRIB_BUFFER_INCLUDE
|
||||||
#define HGL_GRAPH_VERTEX_BUFFER_INCLUDE
|
#define HGL_GRAPH_VERTEX_ATTRIB_BUFFER_INCLUDE
|
||||||
|
|
||||||
#include<hgl/type/Color3f.h>
|
#include<hgl/type/Color3f.h>
|
||||||
#include<hgl/type/Color4f.h>
|
#include<hgl/type/Color4f.h>
|
||||||
#include<hgl/type/RectScope.h>
|
#include<hgl/type/RectScope.h>
|
||||||
#include<hgl/type/BaseString.h>
|
#include<hgl/type/BaseString.h>
|
||||||
#include<hgl/graph/VertexBufferCreater.h>
|
#include<hgl/graph/VertexAttribBufferCreater.h>
|
||||||
#include<hgl/log/LogInfo.h>
|
#include<hgl/log/LogInfo.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
@ -14,7 +14,7 @@ namespace hgl
|
|||||||
/**
|
/**
|
||||||
* 顶点属性数据实际模板
|
* 顶点属性数据实际模板
|
||||||
*/
|
*/
|
||||||
template<typename T,int C> class VertexBufferBase:public VertexBufferCreater
|
template<typename T,int C> class VertexAttribBufferBase:public VertexAttribBufferCreater
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ namespace hgl
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
VertexBufferBase(uint32_t _size,const T *_data=nullptr):VertexBufferCreater(_size,C,sizeof(T))
|
VertexAttribBufferBase(uint32_t _size,const T *_data=nullptr):VertexAttribBufferCreater(_size,C,sizeof(T))
|
||||||
{
|
{
|
||||||
mem_type=(T *)GetData();
|
mem_type=(T *)GetData();
|
||||||
access=0;
|
access=0;
|
||||||
@ -35,7 +35,7 @@ namespace hgl
|
|||||||
memcpy(mem_type,_data,total_bytes);
|
memcpy(mem_type,_data,total_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~VertexBufferBase()=default;
|
virtual ~VertexAttribBufferBase()=default;
|
||||||
|
|
||||||
void BufferData(const T *ptr)
|
void BufferData(const T *ptr)
|
||||||
{
|
{
|
||||||
@ -53,7 +53,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
if(!mem_type||offset>=count)
|
if(!mem_type||offset>=count)
|
||||||
{
|
{
|
||||||
LOG_HINT(OS_TEXT("VertexBuffer::Get() out,offset:")+OSString::valueOf(offset));
|
LOG_HINT(OS_TEXT("VertexAttribBuffer::Get() out,offset:")+OSString::valueOf(offset));
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
if(access)
|
if(access)
|
||||||
{
|
{
|
||||||
LOG_HINT(OS_TEXT("VertexBuffer::Begin() access!=0,offset:")+OSString::valueOf(offset));
|
LOG_HINT(OS_TEXT("VertexAttribBuffer::Begin() access!=0,offset:")+OSString::valueOf(offset));
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
if(!this->access||this->access+C*number>this->mem_end)
|
if(!this->access||this->access+C*number>this->mem_end)
|
||||||
{
|
{
|
||||||
LOG_HINT(OS_TEXT("VertexBuffer::Write(const T *,number) out,number:")+OSString::valueOf(number));
|
LOG_HINT(OS_TEXT("VertexAttribBuffer::Write(const T *,number) out,number:")+OSString::valueOf(number));
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,16 +109,16 @@ namespace hgl
|
|||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
};//class VertexBuffer
|
};//class VertexAttribBuffer
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 一元数据缓冲区
|
* 一元数据缓冲区
|
||||||
*/
|
*/
|
||||||
template<typename T> class VertexBuffer1:public VertexBufferBase<T,1>
|
template<typename T> class VertexBuffer1:public VertexAttribBufferBase<T,1>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using VertexBufferBase<T,1>::VertexBufferBase;
|
using VertexAttribBufferBase<T,1>::VertexAttribBufferBase;
|
||||||
virtual ~VertexBuffer1()=default;
|
virtual ~VertexBuffer1()=default;
|
||||||
|
|
||||||
VkFormat GetDataType()const override;
|
VkFormat GetDataType()const override;
|
||||||
@ -197,11 +197,11 @@ namespace hgl
|
|||||||
/**
|
/**
|
||||||
* 二元数据缓冲区
|
* 二元数据缓冲区
|
||||||
*/
|
*/
|
||||||
template<typename T> class VertexBuffer2:public VertexBufferBase<T,2>
|
template<typename T> class VertexBuffer2:public VertexAttribBufferBase<T,2>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using VertexBufferBase<T,2>::VertexBufferBase;
|
using VertexAttribBufferBase<T,2>::VertexAttribBufferBase;
|
||||||
virtual ~VertexBuffer2()=default;
|
virtual ~VertexBuffer2()=default;
|
||||||
|
|
||||||
VkFormat GetDataType()const override;
|
VkFormat GetDataType()const override;
|
||||||
@ -486,11 +486,11 @@ namespace hgl
|
|||||||
/**
|
/**
|
||||||
* 三元数据缓冲区
|
* 三元数据缓冲区
|
||||||
*/
|
*/
|
||||||
template<typename T> class VertexBuffer3:public VertexBufferBase<T,3>
|
template<typename T> class VertexBuffer3:public VertexAttribBufferBase<T,3>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using VertexBufferBase<T,3>::VertexBufferBase;
|
using VertexAttribBufferBase<T,3>::VertexAttribBufferBase;
|
||||||
virtual ~VertexBuffer3()=default;
|
virtual ~VertexBuffer3()=default;
|
||||||
|
|
||||||
VkFormat GetDataType()const override;
|
VkFormat GetDataType()const override;
|
||||||
@ -748,11 +748,11 @@ namespace hgl
|
|||||||
/**
|
/**
|
||||||
* 四元数据缓冲区
|
* 四元数据缓冲区
|
||||||
*/
|
*/
|
||||||
template<typename T> class VertexBuffer4:public VertexBufferBase<T,4>
|
template<typename T> class VertexBuffer4:public VertexAttribBufferBase<T,4>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
using VertexBufferBase<T,4>::VertexBufferBase;
|
using VertexAttribBufferBase<T,4>::VertexAttribBufferBase;
|
||||||
virtual ~VertexBuffer4()=default;
|
virtual ~VertexBuffer4()=default;
|
||||||
|
|
||||||
VkFormat GetDataType()const override;
|
VkFormat GetDataType()const override;
|
||||||
@ -1135,7 +1135,7 @@ namespace hgl
|
|||||||
* @param vecsize vec数量
|
* @param vecsize vec数量
|
||||||
* @param vertex_count 顶点数量
|
* @param vertex_count 顶点数量
|
||||||
*/
|
*/
|
||||||
VertexBufferCreater *CreateVB(const uint32_t base_type,const uint32_t vecsize,const uint32_t vertex_count);
|
VertexAttribBufferCreater *CreateVABCreater(const uint32_t base_type,const uint32_t vecsize,const uint32_t vertex_count);
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
#endif//HGL_GRAPH_VERTEX_BUFFER_INCLUDE
|
#endif//HGL_GRAPH_VERTEX_ATTRIB_BUFFER_INCLUDE
|
@ -1,12 +1,15 @@
|
|||||||
#ifndef HGL_GRAPH_VERTEX_BUFFER_CREATER_INCLUDE
|
#ifndef HGL_GRAPH_VERTEX_ATTRIB_BUFFER_CREATER_INCLUDE
|
||||||
#define HGL_GRAPH_VERTEX_BUFFER_CREATER_INCLUDE
|
#define HGL_GRAPH_VERTEX_ATTRIB_BUFFER_CREATER_INCLUDE
|
||||||
|
|
||||||
#include<hgl/graph/vulkan/VK.h>
|
#include<hgl/graph/vulkan/VK.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
namespace graph
|
namespace graph
|
||||||
{
|
{
|
||||||
class VertexBufferCreater
|
/**
|
||||||
|
* 顶点属性缓冲区创建者
|
||||||
|
*/
|
||||||
|
class VertexAttribBufferCreater ///顶点属性缓冲区创建者
|
||||||
{
|
{
|
||||||
void *mem_data; ///<内存中的数据
|
void *mem_data; ///<内存中的数据
|
||||||
|
|
||||||
@ -23,13 +26,13 @@ namespace hgl
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
VertexBufferCreater(uint32_t c,uint32_t dc,uint32_t cs):count(c),dc_num(dc),comp_stride(cs),stride(dc*cs),total_bytes(dc*cs*c)
|
VertexAttribBufferCreater(uint32_t c,uint32_t dc,uint32_t cs):count(c),dc_num(dc),comp_stride(cs),stride(dc*cs),total_bytes(dc*cs*c)
|
||||||
{
|
{
|
||||||
mem_data = hgl_malloc(total_bytes); //在很多情况下,hgl_malloc分配的内存是对齐的,这样有效率上的提升
|
mem_data = hgl_malloc(total_bytes); //在很多情况下,hgl_malloc分配的内存是对齐的,这样有效率上的提升
|
||||||
mem_end = ((char *)mem_data) + total_bytes;
|
mem_end = ((char *)mem_data) + total_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~VertexBufferCreater()
|
virtual ~VertexAttribBufferCreater()
|
||||||
{
|
{
|
||||||
if(mem_data)
|
if(mem_data)
|
||||||
hgl_free(mem_data);
|
hgl_free(mem_data);
|
||||||
@ -42,7 +45,7 @@ namespace hgl
|
|||||||
const uint32_t GetStride ()const{return stride;} ///<取得每一组数据字节数
|
const uint32_t GetStride ()const{return stride;} ///<取得每一组数据字节数
|
||||||
void * GetData ()const{return mem_data;} ///<取得数据指针
|
void * GetData ()const{return mem_data;} ///<取得数据指针
|
||||||
const uint32_t GetTotalBytes ()const{return total_bytes; } ///<取得数据字节数
|
const uint32_t GetTotalBytes ()const{return total_bytes; } ///<取得数据字节数
|
||||||
};//class VertexBufferCreater
|
};//class VertexAttribBufferCreater
|
||||||
}//namespace graph
|
}//namespace graph
|
||||||
}//namespace hgl
|
}//namespace hgl
|
||||||
#endif//HGL_GRAPH_VERTEX_BUFFER_CREATER_INCLUDE
|
#endif//HGL_GRAPH_VERTEX_ATTRIB_BUFFER_CREATER_INCLUDE
|
@ -36,7 +36,7 @@ class Sampler;
|
|||||||
class Memory;
|
class Memory;
|
||||||
class Buffer;
|
class Buffer;
|
||||||
struct BufferData;
|
struct BufferData;
|
||||||
class VertexBuffer;
|
class VertexAttribBuffer;
|
||||||
class IndexBuffer;
|
class IndexBuffer;
|
||||||
|
|
||||||
class CommandBuffer;
|
class CommandBuffer;
|
||||||
|
@ -21,7 +21,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
friend class Device;
|
friend class Device;
|
||||||
friend class VertexBuffer;
|
friend class VertexAttribBuffer;
|
||||||
friend class IndexBuffer;
|
friend class IndexBuffer;
|
||||||
|
|
||||||
Buffer(VkDevice d,const BufferData &b)
|
Buffer(VkDevice d,const BufferData &b)
|
||||||
@ -46,7 +46,7 @@ public:
|
|||||||
bool Write(const void *ptr) {return buf.memory->Write(ptr);}
|
bool Write(const void *ptr) {return buf.memory->Write(ptr);}
|
||||||
};//class Buffer
|
};//class Buffer
|
||||||
|
|
||||||
class VertexBuffer:public Buffer
|
class VertexAttribBuffer:public Buffer
|
||||||
{
|
{
|
||||||
VkFormat format; ///<数据格式
|
VkFormat format; ///<数据格式
|
||||||
uint32_t stride; ///<单个数据字节数
|
uint32_t stride; ///<单个数据字节数
|
||||||
@ -56,7 +56,7 @@ private:
|
|||||||
|
|
||||||
friend class Device;
|
friend class Device;
|
||||||
|
|
||||||
VertexBuffer(VkDevice d,const BufferData &vb,VkFormat fmt,uint32_t _stride,uint32_t _count):Buffer(d,vb)
|
VertexAttribBuffer(VkDevice d,const BufferData &vb,VkFormat fmt,uint32_t _stride,uint32_t _count):Buffer(d,vb)
|
||||||
{
|
{
|
||||||
format=fmt;
|
format=fmt;
|
||||||
stride=_stride;
|
stride=_stride;
|
||||||
@ -65,7 +65,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
~VertexBuffer()=default;
|
~VertexAttribBuffer()=default;
|
||||||
|
|
||||||
const VkFormat GetFormat()const { return format; }
|
const VkFormat GetFormat()const { return format; }
|
||||||
const uint32_t GetStride()const { return stride; }
|
const uint32_t GetStride()const { return stride; }
|
||||||
@ -75,7 +75,7 @@ public:
|
|||||||
{
|
{
|
||||||
return Buffer::Map(start*stride,size*stride);
|
return Buffer::Map(start*stride,size*stride);
|
||||||
}
|
}
|
||||||
};//class VertexBuffer:public Buffer
|
};//class VertexAttribBuffer:public Buffer
|
||||||
|
|
||||||
class IndexBuffer:public Buffer
|
class IndexBuffer:public Buffer
|
||||||
{
|
{
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#include<hgl/graph/vulkan/VKDeviceAttribute.h>
|
#include<hgl/graph/vulkan/VKDeviceAttribute.h>
|
||||||
#include<hgl/graph/vulkan/VKSwapchain.h>
|
#include<hgl/graph/vulkan/VKSwapchain.h>
|
||||||
#include<hgl/graph/vulkan/VKRenderTarget.h>
|
#include<hgl/graph/vulkan/VKRenderTarget.h>
|
||||||
#include<hgl/graph/VertexBufferCreater.h>
|
#include<hgl/graph/VertexAttribBufferCreater.h>
|
||||||
|
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
@ -87,9 +87,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,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);}
|
Buffer * CreateBuffer(VkBufferUsageFlags buf_usage,VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateBuffer(buf_usage,size,nullptr,sharing_mode);}
|
||||||
|
|
||||||
VertexBuffer * CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
VertexAttribBuffer * CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
||||||
VertexBuffer * CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(format,count,nullptr,sharing_mode);}
|
VertexAttribBuffer * CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(format,count,nullptr,sharing_mode);}
|
||||||
VertexBuffer * CreateVBO(const VertexBufferCreater *vbc,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(vbc->GetDataType(),vbc->GetCount(),vbc->GetData(),sharing_mode);}
|
VertexAttribBuffer * CreateVBO(const VertexAttribBufferCreater *vbc,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(vbc->GetDataType(),vbc->GetCount(),vbc->GetData(),sharing_mode);}
|
||||||
|
|
||||||
IndexBuffer * CreateIBO(VkIndexType index_type,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
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);}
|
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);}
|
||||||
|
@ -47,8 +47,8 @@ public:
|
|||||||
void SetBoundingBox(const AABB &aabb){BoundingBox=aabb;}
|
void SetBoundingBox(const AABB &aabb){BoundingBox=aabb;}
|
||||||
const AABB &GetBoundingBox()const {return BoundingBox;}
|
const AABB &GetBoundingBox()const {return BoundingBox;}
|
||||||
|
|
||||||
bool Set(const int stage_input_binding, VertexBuffer *vb,VkDeviceSize offset=0);
|
bool Set(const int stage_input_binding, VertexAttribBuffer *vb,VkDeviceSize offset=0);
|
||||||
bool Set(const AnsiString &name, VertexBuffer *vb,VkDeviceSize offset=0);
|
bool Set(const AnsiString &name, VertexAttribBuffer *vb,VkDeviceSize offset=0);
|
||||||
|
|
||||||
bool Set(IndexBuffer *ib,VkDeviceSize offset=0)
|
bool Set(IndexBuffer *ib,VkDeviceSize offset=0)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include<hgl/graph/vulkan/VKBuffer.h>
|
#include<hgl/graph/vulkan/VKBuffer.h>
|
||||||
#include<hgl/graph/VertexBuffer.h>
|
#include<hgl/graph/VertexAttribBuffer.h>
|
||||||
#include<spirv_cross/spirv_common.hpp>
|
#include<spirv_cross/spirv_common.hpp>
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
@ -9,7 +9,7 @@ Buffer::~Buffer()
|
|||||||
vkDestroyBuffer(device,buf.buffer,nullptr);
|
vkDestroyBuffer(device,buf.buffer,nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
VertexBufferCreater *CreateVB(const uint32_t base_type,const uint32_t vecsize,const uint32_t vertex_count)
|
VertexAttribBufferCreater *CreateVABCreater(const uint32_t base_type,const uint32_t vecsize,const uint32_t vertex_count)
|
||||||
{
|
{
|
||||||
if(base_type==spirv_cross::SPIRType::SByte)
|
if(base_type==spirv_cross::SPIRType::SByte)
|
||||||
{
|
{
|
||||||
|
@ -44,7 +44,7 @@ bool Device::CreateBuffer(BufferData *buf,VkBufferUsageFlags buf_usage,VkDeviceS
|
|||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
VertexBuffer *Device::CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
VertexAttribBuffer *Device::CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
||||||
{
|
{
|
||||||
const uint32_t stride=GetStrideByFormat(format);
|
const uint32_t stride=GetStrideByFormat(format);
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ VertexBuffer *Device::CreateVBO(VkFormat format,uint32_t count,const void *data,
|
|||||||
if(!CreateBuffer(&buf,VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,size,data,sharing_mode))
|
if(!CreateBuffer(&buf,VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,size,data,sharing_mode))
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
return(new VertexBuffer(attr->device,buf,format,stride,count));
|
return(new VertexAttribBuffer(attr->device,buf,format,stride,count));
|
||||||
}
|
}
|
||||||
|
|
||||||
IndexBuffer *Device::CreateIBO(VkIndexType index_type,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
IndexBuffer *Device::CreateIBO(VkIndexType index_type,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
||||||
|
@ -20,7 +20,7 @@ Renderable::~Renderable()
|
|||||||
delete[] buf_list;
|
delete[] buf_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Renderable::Set(const int stage_input_binding,VertexBuffer *vbo,VkDeviceSize offset)
|
bool Renderable::Set(const int stage_input_binding,VertexAttribBuffer *vbo,VkDeviceSize offset)
|
||||||
{
|
{
|
||||||
if(stage_input_binding<0||stage_input_binding>=buf_count||!vbo)return(false);
|
if(stage_input_binding<0||stage_input_binding>=buf_count||!vbo)return(false);
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ bool Renderable::Set(const int stage_input_binding,VertexBuffer *vbo,VkDeviceSiz
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Renderable::Set(const AnsiString &name,VertexBuffer *vbo,VkDeviceSize offset)
|
bool Renderable::Set(const AnsiString &name,VertexAttribBuffer *vbo,VkDeviceSize offset)
|
||||||
{
|
{
|
||||||
return Set(vertex_sm->GetStageInputBinding(name),vbo,offset);
|
return Set(vertex_sm->GetStageInputBinding(name),vbo,offset);
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,8 @@ SOURCE_GROUP("Material" FILES ${SG_MATERIAL_HEADER}
|
|||||||
SOURCE_GROUP("Material\\Shader" FILES ${SHADER_RESOURCE_FILES})
|
SOURCE_GROUP("Material\\Shader" FILES ${SHADER_RESOURCE_FILES})
|
||||||
|
|
||||||
|
|
||||||
SET(SG_VERTEX_SOURCE ${ROOT_INCLUDE_PATH}/hgl/graph/VertexBufferCreater.h
|
SET(SG_VERTEX_SOURCE ${ROOT_INCLUDE_PATH}/hgl/graph/VertexAttribBufferCreater.h
|
||||||
${ROOT_INCLUDE_PATH}/hgl/graph/VertexBuffer.h)
|
${ROOT_INCLUDE_PATH}/hgl/graph/VertexAttribBuffer.h)
|
||||||
|
|
||||||
SOURCE_GROUP("VertexBuffer" FILES ${SG_VERTEX_SOURCE})
|
SOURCE_GROUP("VertexBuffer" FILES ${SG_VERTEX_SOURCE})
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// GL to VK: swap Y/Z of position/normal/tangent/index
|
// GL to VK: swap Y/Z of position/normal/tangent/index
|
||||||
|
|
||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
#include<hgl/graph/VertexBuffer.h>
|
#include<hgl/graph/VertexAttribBuffer.h>
|
||||||
#include<hgl/graph/vulkan/VKDevice.h>
|
#include<hgl/graph/vulkan/VKDevice.h>
|
||||||
#include<hgl/graph/vulkan/VKShaderModule.h>
|
#include<hgl/graph/vulkan/VKShaderModule.h>
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/SceneDB.h>
|
||||||
@ -103,7 +103,7 @@ namespace hgl
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void Finish(int binding,VertexBufferCreater *vb)
|
void Finish(int binding,VertexAttribBufferCreater *vb)
|
||||||
{
|
{
|
||||||
render_obj->Set(binding,db->CreateVBO(vb));
|
render_obj->Set(binding,db->CreateVBO(vb));
|
||||||
delete vb;
|
delete vb;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include<hgl/graph/SceneNode.h>
|
#include<hgl/graph/SceneNode.h>
|
||||||
#include<hgl/graph/vulkan/VKRenderable.h>
|
#include<hgl/graph/vulkan/VKRenderable.h>
|
||||||
#include<hgl/graph/vulkan/VKCommandBuffer.h>
|
#include<hgl/graph/vulkan/VKCommandBuffer.h>
|
||||||
#include<hgl/graph/VertexBuffer.h>
|
#include<hgl/graph/VertexAttribBuffer.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ namespace hgl
|
|||||||
|
|
||||||
render_obj =nullptr;
|
render_obj =nullptr;
|
||||||
vertices_number =0;
|
vertices_number =0;
|
||||||
vb_vertex =nullptr;
|
vabc_vertex =nullptr;
|
||||||
ibo =nullptr;
|
ibo =nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,25 +33,25 @@ namespace hgl
|
|||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
VertexBufferCreater *RenderableCreater::Bind(const AnsiString &name)
|
VertexAttribBufferCreater *RenderableCreater::CreateVAB(const AnsiString &name)
|
||||||
{
|
{
|
||||||
if(!vsm)return(false);
|
if(!vsm)return(false);
|
||||||
|
|
||||||
VertexBufferCreater *vb;
|
VertexAttribBufferCreater *vabc;
|
||||||
|
|
||||||
if(vb_map.Get(name,vb))
|
if(vabc_maps.Get(name,vabc))
|
||||||
return vb;
|
return vabc;
|
||||||
|
|
||||||
const vulkan::ShaderStage *ss=vsm->GetStageInput(name);
|
const vulkan::ShaderStage *ss=vsm->GetStageInput(name);
|
||||||
|
|
||||||
if(!ss)
|
if(!ss)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
vb=CreateVB(ss->base_type,ss->component,vertices_number);
|
vabc=hgl::graph::CreateVABCreater(ss->base_type,ss->component,vertices_number);
|
||||||
|
|
||||||
vb_map.Add(name,vb);
|
vabc_maps.Add(name,vabc);
|
||||||
|
|
||||||
return vb;
|
return vabc;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 *RenderableCreater::CreateIBO16(uint count,const uint16 *data)
|
uint16 *RenderableCreater::CreateIBO16(uint count,const uint16 *data)
|
||||||
@ -74,7 +74,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
const uint si_count=vsm->GetStageInputCount();
|
const uint si_count=vsm->GetStageInputCount();
|
||||||
|
|
||||||
if(vb_map.GetCount()!=si_count)
|
if(vabc_maps.GetCount()!=si_count)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,9 +6,9 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
namespace graph
|
namespace graph
|
||||||
{
|
{
|
||||||
vulkan::VertexBuffer *SceneDB::CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
vulkan::VertexAttribBuffer *SceneDB::CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
||||||
{
|
{
|
||||||
vulkan::VertexBuffer *vb=device->CreateVBO(format,count,data,sharing_mode);
|
vulkan::VertexAttribBuffer *vb=device->CreateVBO(format,count,data,sharing_mode);
|
||||||
|
|
||||||
if(!vb)
|
if(!vb)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user