From 02169963de34b56a8427785b89015e7d41c82211 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 2 Apr 2024 21:34:49 +0800 Subject: [PATCH] improved PrimitiveCreater::CreateIBO.. functions for template --- inc/hgl/graph/PrimitiveCreater.h | 19 +++++++++++++++++-- src/SceneGraph/PrimitiveCreater.cpp | 16 ---------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/inc/hgl/graph/PrimitiveCreater.h b/inc/hgl/graph/PrimitiveCreater.h index 8f521b0e..4c4df6a3 100644 --- a/inc/hgl/graph/PrimitiveCreater.h +++ b/inc/hgl/graph/PrimitiveCreater.h @@ -74,8 +74,23 @@ namespace hgl bool WriteVAD(const AnsiString &name,const void *data,const uint32_t bytes); ///<直接写入顶点属性数据 - uint16 * CreateIBO16(uint count,const uint16 *data=nullptr); ///<创建16位的索引缓冲区 - uint32 * CreateIBO32(uint count,const uint32 *data=nullptr); ///<创建32位的索引缓冲区 + template + 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(count,data);} ///<创建8位的索引缓冲区 + uint16 * CreateIBO16(uint count,const uint16 *data=nullptr){return CreateIBO(count,data);} ///<创建16位的索引缓冲区 + uint32 * CreateIBO32(uint count,const uint32 *data=nullptr){return CreateIBO(count,data);} ///<创建32位的索引缓冲区 virtual Primitive * Finish(const AnsiString &); ///<结束并创建可渲染对象 };//class PrimitiveCreater diff --git a/src/SceneGraph/PrimitiveCreater.cpp b/src/SceneGraph/PrimitiveCreater.cpp index cd26e28b..f02d6d8a 100644 --- a/src/SceneGraph/PrimitiveCreater.cpp +++ b/src/SceneGraph/PrimitiveCreater.cpp @@ -89,22 +89,6 @@ namespace hgl return true; } - uint16 *PrimitiveCreater::CreateIBO16(uint count,const uint16 *data) - { - if(ibo)return(nullptr); - - ibo=db->CreateIBO16(count,data); - return (uint16 *)ibo->Map(); - } - - uint32 *PrimitiveCreater::CreateIBO32(uint count,const uint32 *data) - { - if(ibo)return(nullptr); - - ibo=db->CreateIBO32(count,data); - return (uint32 *)ibo->Map(); - } - Primitive *PrimitiveCreater::Finish(const AnsiString &prim_name) { const uint si_count=vil->GetCount(VertexInputGroup::Basic);