moved RenderResource to PrimitiveCreater::Finish()

This commit is contained in:
hyzboy 2024-05-05 15:44:51 +08:00
parent 310cc151fa
commit ead4ba65c1
4 changed files with 61 additions and 53 deletions

View File

@ -19,7 +19,6 @@ protected:
const GPUPhysicalDevice *phy_device;
VertexDataManager *vdm;
RenderResource *db;
const VIL *vil;
@ -40,7 +39,7 @@ protected:
public:
PrimitiveCreater(RenderResource *sdb,const VIL *);
PrimitiveCreater(GPUDevice *,const VIL *);
PrimitiveCreater(VertexDataManager *);
virtual ~PrimitiveCreater();
@ -88,6 +87,6 @@ public:
return(true);
}
virtual Primitive * Finish(const AnsiString &); ///<结束并创建可渲染对象
virtual Primitive * Finish(RenderResource *,const AnsiString &); ///<结束并创建可渲染对象
};//class PrimitiveCreater
VK_NAMESPACE_END

View File

@ -1,5 +1,4 @@
#ifndef HGL_GRAPH_VULKAN_PRIMITIVE_INCLUDE
#define HGL_GRAPH_VULKAN_PRIMITIVE_INCLUDE
#pragma once
#include<hgl/type/Map.h>
#include<hgl/type/String.h>
@ -58,4 +57,3 @@ public:
const AABB & GetBoundingBox ()const{return BoundingBox;}
};//class Primitive
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_PRIMITIVE_INCLUDE

View File

@ -16,7 +16,7 @@ namespace hgl
{
Primitive *CreateRectangle(RenderResource *db,const VIL *vil,const RectangleCreateInfo *rci)
{
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
if(!rc.Init(4,0))
return(nullptr);
@ -28,7 +28,7 @@ namespace hgl
vertex->WriteRectFan(rci->scope);
return rc.Finish("Rectangle");
return rc.Finish(db,"Rectangle");
}
Primitive *CreateGBufferCompositionRectangle(RenderResource *db,const VIL *vil)
@ -42,7 +42,7 @@ namespace hgl
Primitive *CreateRoundRectangle(RenderResource *db,const VIL *vil,const RoundRectangleCreateInfo *rci)
{
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
if(rci->radius==0||rci->round_per<=1) //这是要画矩形
{
@ -111,12 +111,12 @@ namespace hgl
delete[] coord;
}
return rc.Finish("RoundRectangle");
return rc.Finish(db,"RoundRectangle");
}
Primitive *CreateCircle(RenderResource *db,const VIL *vil,const CircleCreateInfo *cci)
{
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
uint edge;
@ -159,12 +159,12 @@ namespace hgl
color->Write(cci->border_color);
}
return rc.Finish("Circle");
return rc.Finish(db,"Circle");
}
Primitive *CreatePlaneGrid(RenderResource *db,const VIL *vil,const PlaneGridCreateInfo *pgci)
{
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
if(!rc.Init(((pgci->grid_size.Width()+1)+(pgci->grid_size.Height()+1))*2,0))
return(nullptr);
@ -209,7 +209,7 @@ namespace hgl
}
}
return rc.Finish("PlaneGrid");
return rc.Finish(db,"PlaneGrid");
}
Primitive *CreatePlane(RenderResource *db,const VIL *vil)
@ -219,7 +219,7 @@ namespace hgl
const Vector3f xy_normal(0.0f,0.0f,1.0f);
const Vector3f xy_tangent(1.0f,0.0f,0.0f);
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
if(!rc.Init(4,8))
return(nullptr);
@ -245,7 +245,7 @@ namespace hgl
tex_coord->Write(xy_tex_coord,4);
}
return rc.Finish("Plane");
return rc.Finish(db,"Plane");
}
Primitive *CreateCube(RenderResource *db,const VIL *vil,const CubeCreateInfo *cci)
@ -301,7 +301,7 @@ namespace hgl
16, 17, 18, 16, 18, 19,
20, 23, 22, 20, 22, 21};
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
if(!rc.Init(24,6*2*3,IndexType::U16))
return(nullptr);
@ -343,7 +343,7 @@ namespace hgl
//rc.CreateIBO16(6*2*3,indices);
rc.WriteIBO(indices);
return rc.Finish("Cube");
return rc.Finish(db,"Cube");
}
template<typename T> void CreateSphereIndices(T *tp,uint numberParallels,const uint numberSlices)
@ -443,7 +443,7 @@ namespace hgl
*/
Primitive *CreateSphere(RenderResource *db,const VIL *vil,const uint numberSlices)
{
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
uint numberParallels = (numberSlices+1) / 2;
uint numberVertices = (numberParallels + 1) * (numberSlices + 1);
@ -519,12 +519,12 @@ namespace hgl
return(nullptr);
}
return rc.Finish("Sphere");
return rc.Finish(db,"Sphere");
}
Primitive *CreateDome(RenderResource *db,const VIL *vil,const uint numberSlices)
{
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
uint i, j;
@ -610,7 +610,7 @@ namespace hgl
return(nullptr);
}
return rc.Finish("Dome");
return rc.Finish(db,"Dome");
}
namespace
@ -650,7 +650,7 @@ namespace hgl
Primitive *CreateTorus(RenderResource *db,const VIL *vil,const TorusCreateInfo *tci)
{
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
// s, t = parametric values of the equations, in the range [0,1]
float s = 0;
@ -755,7 +755,7 @@ namespace hgl
if(index_type==IndexType::U8 )CreateTorusIndices<uint8 >(rc.AccessIBO<uint8 >(),tci->numberSlices,tci->numberStacks);else
return(nullptr);
}
return rc.Finish("Torus");
return rc.Finish(db,"Torus");
}
namespace
@ -815,7 +815,7 @@ namespace hgl
if(numberIndices<=0)
return(nullptr);
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
uint numberVertices = (cci->numberSlices + 2) * 2 + (cci->numberSlices + 1) * 2;
@ -989,7 +989,7 @@ namespace hgl
return(nullptr);
}
return rc.Finish("Cylinder");
return rc.Finish(db,"Cylinder");
}
namespace
@ -1034,7 +1034,7 @@ namespace hgl
Primitive *CreateCone(RenderResource *db,const VIL *vil,const ConeCreateInfo *cci)
{
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
uint i, j;
@ -1160,14 +1160,14 @@ namespace hgl
return(nullptr);
}
return rc.Finish("Cone");
return rc.Finish(db,"Cone");
}
Primitive *CreateAxis(RenderResource *db,const VIL *vil,const AxisCreateInfo *aci)
{
if(!db||!vil||!aci)return(nullptr);
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
if(!rc.Init(6,0))
return(nullptr);
@ -1187,7 +1187,7 @@ namespace hgl
vertex->Write(0,0,0);color->Write(aci->color[2]);
vertex->Write(0,0,s);color->Write(aci->color[2]);
return rc.Finish("Axis");
return rc.Finish(db,"Axis");
}
Primitive *CreateBoundingBox(RenderResource *db,const VIL *vil,const BoundingBoxCreateInfo *cci)
@ -1212,7 +1212,7 @@ namespace hgl
0,4, 1,5, 2,6, 3,7
};
PrimitiveCreater rc(db,vil);
PrimitiveCreater rc(db->GetDevice(),vil);
if(!rc.Init(8,24,IndexType::U16))
return(nullptr);
@ -1241,7 +1241,7 @@ namespace hgl
rc.WriteIBO<uint16>(indices);
return rc.Finish("BoundingBox");
return rc.Finish(db,"BoundingBox");
}
}//namespace inline_geometry
}//namespace graph

View File

@ -5,13 +5,12 @@
#include<hgl/graph/VertexDataManager.h>
VK_NAMESPACE_BEGIN
PrimitiveCreater::PrimitiveCreater(RenderResource *sdb,const VIL *v)
PrimitiveCreater::PrimitiveCreater(GPUDevice *dev,const VIL *v)
{
device =sdb->GetDevice();
device =dev;
phy_device =device->GetPhysicalDevice();
vdm =nullptr;
db =sdb;
vil =v;
vertices_number =0;
@ -26,7 +25,6 @@ PrimitiveCreater::PrimitiveCreater(VertexDataManager *_vdm)
phy_device =device->GetPhysicalDevice();
vdm =_vdm;
db =nullptr;
vil =vdm->GetVIL();
vertices_number =0;
@ -73,7 +71,7 @@ bool PrimitiveCreater::Init(const uint32 vertex_count,const uint32 index_count,I
}
ibo=device->CreateIBO(it,index_count);
//ibo=db->CreateIBO(it,index_count);
if(!ibo)return(false);
}
@ -97,7 +95,7 @@ bool PrimitiveCreater::AcquirePVB(VABAccess *vad,const AnsiString &name,const vo
if(vab_map.Get(name,*vad))
return true;
vad->vab =db->CreateVAB(vif->format,vertices_number,data);
vad->vab =device->CreateVAB(vif->format,vertices_number,data);
if(!data)
vad->map_ptr=vad->vab->Map();
@ -154,32 +152,45 @@ void PrimitiveCreater::ClearAllData()
}
}
Primitive *PrimitiveCreater::Finish(const AnsiString &prim_name)
Primitive *PrimitiveCreater::Finish(RenderResource *rr,const AnsiString &prim_name)
{
const uint si_count=vil->GetCount(VertexInputGroup::Basic);
if(vab_map.GetCount()!=si_count)
return(nullptr);
Primitive *primitive=db->CreatePrimitive(prim_name,vertices_number);
Primitive *primitive=rr->CreatePrimitive(prim_name,vertices_number);
const auto *sp=vab_map.GetDataList();
for(uint i=0;i<si_count;i++)
{
if((*sp)->value.vab)
const auto *sp=vab_map.GetDataList();
for(uint i=0;i<si_count;i++)
{
if((*sp)->value.map_ptr)
(*sp)->value.vab->Unmap();
if((*sp)->value.vab)
{
if((*sp)->value.map_ptr)
(*sp)->value.vab->Unmap();
primitive->SetVAB((*sp)->key,(*sp)->value.vab);
primitive->SetVAB((*sp)->key,(*sp)->value.vab);
}
else
{
ClearAllData();
return(nullptr);
}
++sp;
}
else
}
{
const auto *sp=vab_map.GetDataList();
for(uint i=0;i<si_count;i++)
{
//ClearAllData();
return(nullptr);
}
if((*sp)->value.vab)
rr->Add((*sp)->value.vab);
++sp;
++sp;
}
}
if(ibo)
@ -187,11 +198,11 @@ Primitive *PrimitiveCreater::Finish(const AnsiString &prim_name)
ibo->Unmap();
primitive->SetIndex(ibo,0,index_number);
db->Add(ibo);
rr->Add(ibo);
ibo=nullptr; //避免释构函数删除
}
db->Add(primitive);
rr->Add(primitive);
return primitive;
}