renamed many values and function's name.

This commit is contained in:
hyzboy 2024-04-27 01:07:44 +08:00
parent bbf94767fe
commit ad330f3a42
13 changed files with 52 additions and 59 deletions

View File

@ -89,24 +89,6 @@ namespace hgl
return(true); return(true);
} }
//template<typename T,IndexType IT>
//T * CreateIBO(const uint count,const T *data=nullptr) ///<创建索引缓冲区
//{
// if(ibo)
// return(nullptr);
//
// ibo=db->CreateIBO(IT,count,data);
// if(!ibo)
// return(nullptr);
// return (T *)ibo->Map();
//}
//uint8 * CreateIBO8 (uint count,const uint8 *data=nullptr){return CreateIBO<uint8 ,IndexType::U8 >(count,data);} ///<创建8位的索引缓冲区
//uint16 * CreateIBO16(uint count,const uint16 *data=nullptr){return CreateIBO<uint16,IndexType::U16>(count,data);} ///<创建16位的索引缓冲区
//uint32 * CreateIBO32(uint count,const uint32 *data=nullptr){return CreateIBO<uint32,IndexType::U32>(count,data);} ///<创建32位的索引缓冲区
virtual Primitive * Finish(const AnsiString &); ///<结束并创建可渲染对象 virtual Primitive * Finish(const AnsiString &); ///<结束并创建可渲染对象
};//class PrimitiveCreater };//class PrimitiveCreater
}//namespace graph }//namespace graph

View File

@ -64,7 +64,8 @@ class IndexBuffer;
struct IndexBufferAccess struct IndexBufferAccess
{ {
IndexBuffer *buffer=nullptr; IndexBuffer *buffer=nullptr;
VkDeviceSize offset=0; VkDeviceSize start=0;
VkDeviceSize count=0;
}; };
using IBAccess=IndexBufferAccess; using IBAccess=IndexBufferAccess;

View File

@ -170,7 +170,7 @@ public:
return(true); return(true);
} }
void BindIBO(const IBAccess *); // void BindIBO(const IBAccess *);
bool BindVBO(Renderable *); bool BindVBO(Renderable *);
@ -192,8 +192,8 @@ public: //draw
void Draw (const uint32_t vertex_count,const uint32_t instance_count) {vkCmdDraw(cmd_buf,vertex_count,instance_count,0,0);} void Draw (const uint32_t vertex_count,const uint32_t instance_count) {vkCmdDraw(cmd_buf,vertex_count,instance_count,0,0);}
void DrawIndexed (const uint32_t index_count ,const uint32_t instance_count) {vkCmdDrawIndexed(cmd_buf,index_count,instance_count,0,0,0);} void DrawIndexed (const uint32_t index_count ,const uint32_t instance_count) {vkCmdDrawIndexed(cmd_buf,index_count,instance_count,0,0,0);}
template<typename ...ARGS> void Draw (ARGS...args) {vkCmdDraw(cmd_buf,args...);} // template<typename ...ARGS> void Draw (ARGS...args) {vkCmdDraw(cmd_buf,args...);}
template<typename ...ARGS> void DrawIndexed (ARGS...args) {vkCmdDrawIndexed(cmd_buf,args...);} // template<typename ...ARGS> void DrawIndexed (ARGS...args) {vkCmdDrawIndexed(cmd_buf,args...);}
void DrawIndirect (VkBuffer,VkDeviceSize, uint32_t drawCount,uint32_t stride=sizeof(VkDrawIndirectCommand )); void DrawIndirect (VkBuffer,VkDeviceSize, uint32_t drawCount,uint32_t stride=sizeof(VkDrawIndirectCommand ));
void DrawIndexedIndirect(VkBuffer,VkDeviceSize, uint32_t drawCount,uint32_t stride=sizeof(VkDrawIndexedIndirectCommand )); void DrawIndexedIndirect(VkBuffer,VkDeviceSize, uint32_t drawCount,uint32_t stride=sizeof(VkDrawIndexedIndirectCommand ));
@ -201,6 +201,7 @@ public: //draw
void DrawIndexedIndirect(VkBuffer buf, uint32_t drawCount,uint32_t stride=sizeof(VkDrawIndexedIndirectCommand )){return DrawIndexedIndirect( buf,0,drawCount,stride);} void DrawIndexedIndirect(VkBuffer buf, uint32_t drawCount,uint32_t stride=sizeof(VkDrawIndexedIndirectCommand )){return DrawIndexedIndirect( buf,0,drawCount,stride);}
void Draw (const VertexInputData *vid); void Draw (const VertexInputData *vid);
void DrawIndexed (const IBAccess *iba,const uint32_t instance_count);
public: //dynamic state public: //dynamic state
};//class RenderCmdBuffer:public GPUCmdBuffer };//class RenderCmdBuffer:public GPUCmdBuffer

View File

@ -16,7 +16,7 @@ class Primitive
protected: protected:
uint32_t vertex_count; VkDeviceSize vertex_count;
VABAccessMap buffer_list; VABAccessMap buffer_list;
@ -30,7 +30,7 @@ protected:
public: public:
Primitive(GPUDevice *dev,const AnsiString &n,const uint32_t vc=0) Primitive(GPUDevice *dev,const AnsiString &n,const VkDeviceSize vc=0)
{ {
device=dev; device=dev;
prim_name=n; prim_name=n;
@ -42,13 +42,13 @@ 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 AnsiString &name,VAB *vb,VkDeviceSize offset=0); bool SetVAB(const AnsiString &name,VAB *vb,VkDeviceSize start=0);
bool Set(IndexBuffer *ib,VkDeviceSize offset=0); bool SetIndex(IndexBuffer *ib,VkDeviceSize start,const VkDeviceSize index_count);
public: public:
const uint32_t GetVertexCount ()const {return vertex_count;} const VkDeviceSize GetVertexCount ()const {return vertex_count;}
bool GetVABAccess (const AnsiString &,VABAccess *); bool GetVABAccess (const AnsiString &,VABAccess *);
const int GetBufferCount ()const {return buffer_list.GetCount();} const int GetBufferCount ()const {return buffer_list.GetCount();}

View File

@ -8,7 +8,7 @@ VK_NAMESPACE_BEGIN
struct PrimitiveData struct PrimitiveData
{ {
uint32_t vertex_count; VkDeviceSize vertex_count;
uint32_t va_count; uint32_t va_count;

View File

@ -11,13 +11,13 @@ class RenderablePrimitiveCreater
{ {
RenderResource *rr; RenderResource *rr;
uint32_t vertex_count; VkDeviceSize vertex_count;
Primitive *prim; Primitive *prim;
public: public:
RenderablePrimitiveCreater(RenderResource *_rr,const AnsiString &name,uint32_t vc) RenderablePrimitiveCreater(RenderResource *_rr,const AnsiString &name,VkDeviceSize vc)
{ {
rr=_rr; rr=_rr;
vertex_count=vc; vertex_count=vc;
@ -32,18 +32,18 @@ public:
if(!vab) if(!vab)
return(nullptr); return(nullptr);
prim->Set(name,vab); prim->SetVAB(name,vab);
return(vab); return(vab);
} }
IndexBuffer *SetIBO(const IndexType &it,const void *buf,const uint32_t index_count) IndexBuffer *SetIndex(const IndexType &it,const void *buf,const VkDeviceSize index_count)
{ {
IndexBuffer *ibo=rr->CreateIBO(it,index_count,buf); IndexBuffer *ibo=rr->CreateIBO(it,index_count,buf);
if(!ibo) if(!ibo)
return(nullptr); return(nullptr);
prim->Set(ibo); prim->SetIndex(ibo,0,index_count);
return(ibo); return(ibo);
} }

View File

@ -40,8 +40,7 @@ namespace hgl
struct VABAccess struct VABAccess
{ {
VAB *vab; VAB *vab;
VkDeviceSize offset; VkDeviceSize start;
VkDeviceSize size;
void *map_ptr; void *map_ptr;

View File

@ -51,14 +51,14 @@ namespace hgl
/** /**
* *
* @param offset 访 * @param start 访
* @return 访 * @return 访
*/ */
T *Get(uint32_t offset=0) T *Get(uint32_t offset=0)
{ {
if(!data||offset>=count) if(!data||offset>=count)
{ {
LOG_HINT(OS_TEXT("VertexAttribDataAccess::Get() out,offset:")+OSString::numberOf(offset)); LOG_HINT(OS_TEXT("VertexAttribDataAccess::Get() out,start:")+OSString::numberOf(offset));
return(nullptr); return(nullptr);
} }
@ -67,14 +67,14 @@ namespace hgl
/** /**
* 访 * 访
* @param offset 访 * @param start 访
* @return 访 * @return 访
*/ */
T *Begin(uint32_t offset=0) T *Begin(uint32_t offset=0)
{ {
if(access) if(access)
{ {
LOG_HINT(OS_TEXT("VertexAttribDataAccess::Begin() access!=0,offset:")+OSString::numberOf(offset)); LOG_HINT(OS_TEXT("VertexAttribDataAccess::Begin() access!=0,start:")+OSString::numberOf(offset));
return(nullptr); return(nullptr);
} }

View File

@ -260,9 +260,7 @@ void MaterialRenderList::Render(RenderItem *ri)
if(iba->buffer) if(iba->buffer)
{ {
cmd_buf->BindIBO(iba); cmd_buf->DrawIndexed(iba,ri->count);
cmd_buf->DrawIndexed(iba->buffer->GetCount(),ri->count);
} }
else else
{ {

View File

@ -173,7 +173,7 @@ namespace hgl
if((*sp)->value.map_ptr) if((*sp)->value.map_ptr)
(*sp)->value.vab->Unmap(); (*sp)->value.vab->Unmap();
primitive->Set((*sp)->key,(*sp)->value.vab); primitive->SetVAB((*sp)->key,(*sp)->value.vab);
} }
else else
{ {
@ -187,7 +187,7 @@ namespace hgl
if(ibo) if(ibo)
{ {
ibo->Unmap(); ibo->Unmap();
primitive->Set(ibo); primitive->SetIndex(ibo,0,index_number);
db->Add(ibo); db->Add(ibo);
ibo=nullptr; //避免释构函数删除 ibo=nullptr; //避免释构函数删除

View File

@ -129,13 +129,13 @@ bool RenderCmdBuffer::BindDescriptorSets(Material *mtl)
return(true); return(true);
} }
void RenderCmdBuffer::BindIBO(const IBAccess *iba) //void RenderCmdBuffer::BindIBO(const IBAccess *iba)
{ //{
vkCmdBindIndexBuffer( cmd_buf, // vkCmdBindIndexBuffer( cmd_buf,
iba->buffer->GetBuffer(), // iba->buffer->GetBuffer(),
iba->offset, // iba->start,
VkIndexType(iba->buffer->GetType())); // VkIndexType(iba->buffer->GetType()));
} //}
bool RenderCmdBuffer::BindVBO(Renderable *ri) bool RenderCmdBuffer::BindVBO(Renderable *ri)
{ {
@ -154,7 +154,7 @@ bool RenderCmdBuffer::BindVBO(Renderable *ri)
if(indices_buffer) if(indices_buffer)
vkCmdBindIndexBuffer(cmd_buf, vkCmdBindIndexBuffer(cmd_buf,
indices_buffer->GetBuffer(), indices_buffer->GetBuffer(),
vid->ib_access->offset, vid->ib_access->start,
VkIndexType(indices_buffer->GetType())); VkIndexType(indices_buffer->GetType()));
return(true); return(true);
@ -187,8 +187,20 @@ void RenderCmdBuffer::DrawIndexedIndirect( VkBuffer buffer,
void RenderCmdBuffer::Draw(const VertexInputData *vid) void RenderCmdBuffer::Draw(const VertexInputData *vid)
{ {
if (vid->ib_access->buffer) if (vid->ib_access->buffer)
DrawIndexed(vid->ib_access->buffer->GetCount()); DrawIndexed(vid->ib_access->count);
else else
Draw(vid->vertex_count); Draw(vid->vertex_count);
} }
void RenderCmdBuffer::DrawIndexed(const IBAccess *iba,const uint32_t instance_count)
{
if(!iba||instance_count<=0)return;
vkCmdBindIndexBuffer(cmd_buf,
iba->buffer->GetBuffer(),
iba->start,
VkIndexType(iba->buffer->GetType()));
vkCmdDrawIndexed(cmd_buf,iba->count,instance_count,0,0,0);
}
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -27,7 +27,7 @@ VK_NAMESPACE_BEGIN
// return(true); // return(true);
//} //}
bool Primitive::Set(const AnsiString &name,VAB *vab,VkDeviceSize offset) bool Primitive::SetVAB(const AnsiString &name,VAB *vab,VkDeviceSize start)
{ {
if(!vab)return(false); if(!vab)return(false);
if(buffer_list.KeyExist(name))return(false); if(buffer_list.KeyExist(name))return(false);
@ -35,8 +35,7 @@ bool Primitive::Set(const AnsiString &name,VAB *vab,VkDeviceSize offset)
VABAccess vad; VABAccess vad;
vad.vab=vab; vad.vab=vab;
vad.offset=offset; vad.start=start;
vad.size=vab->GetBytes();
buffer_list.Add(name,vad); buffer_list.Add(name,vad);
@ -61,12 +60,13 @@ bool Primitive::GetVABAccess(const AnsiString &name,VABAccess *vad)
return buffer_list.Get(name,*vad); return buffer_list.Get(name,*vad);
} }
bool Primitive::Set(IndexBuffer *ib,VkDeviceSize offset) bool Primitive::SetIndex(IndexBuffer *ib,VkDeviceSize start,const VkDeviceSize index_count)
{ {
if(!ib)return(false); if(!ib)return(false);
ib_access.buffer=ib; ib_access.buffer=ib;
ib_access.offset=offset; ib_access.start=start;
ib_access.count=index_count;
#ifdef _DEBUG #ifdef _DEBUG
DebugUtils *du=device->GetDebugUtils(); DebugUtils *du=device->GetDebugUtils();

View File

@ -95,7 +95,7 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
return(nullptr); return(nullptr);
} }
vid->buffer_offset[i]=vad.offset; vid->buffer_offset[i]=vad.start;
vid->buffer_list[i]=vab->GetBuffer(); vid->buffer_list[i]=vab->GetBuffer();
++vif; ++vif;
} }