Compare commits

...

4 Commits

Author SHA1 Message Date
e778f64f00 renamed to CreateMesh from CreateRenderable 2025-05-18 02:19:14 +08:00
a641c56381 renamed to Mesh.h/.cpp from VKRenderable.h/.cpp 2025-05-18 02:15:33 +08:00
4b2f344c5c renamed to MeshDataBuffer from PrimitiveDataBuffer,
renamed to MeshRenderData from PrimitiveRenderData
2025-05-18 02:07:10 +08:00
014fce2c8e renamed Renderable to Mesh 2025-05-18 02:03:16 +08:00
52 changed files with 161 additions and 162 deletions

@ -1 +1 @@
Subproject commit 6da4b9973812162a966de0db505572f25f1caaca
Subproject commit 9d9fad791d9c6569189bcc57dd4b219df62bc98a

View File

@ -38,7 +38,7 @@ class TestApp:public VulkanApplicationFramework
private:
MaterialInstance * material_instance =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
Pipeline * pipeline =nullptr;
@ -74,7 +74,7 @@ private:
if(!rpc.WriteVAB(VAN::Position, PositionFormat, position_data))return(false);
if(!rpc.WriteVAB(VAN::Color, ColorFormat, color_data ))return(false);
render_obj=db->CreateRenderable(&rpc,material_instance,pipeline);
render_obj=db->CreateMesh(&rpc,material_instance,pipeline);
return(render_obj);
}

View File

@ -36,7 +36,7 @@ private:
Camera cam;
MaterialInstance * material_instance =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
DeviceBuffer * ubo_camera_info =nullptr;
DeviceBuffer * ubo_color_material =nullptr;
DeviceBuffer * ubo_line_config =nullptr;
@ -118,7 +118,7 @@ private:
if(!primitive->Set(VAN::Position, db->CreateVAB(VF_V2F,VERTEX_COUNT,position_data)))return(false);
render_obj=db->CreateRenderable(primitive,material_instance,pipeline);
render_obj=db->CreateMesh(primitive,material_instance,pipeline);
return(true);
}

View File

@ -42,7 +42,7 @@ private:
Camera cam;
MaterialInstance * material_instance =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
DeviceBuffer * ubo_camera_info =nullptr;
DeviceBuffer * ubo_rb_config =nullptr;
@ -140,7 +140,7 @@ private:
if(!primitive->Set(VAN::Position, db->CreateVAB(VF_V4I16,VERTEX_COUNT,position_data)))return(false);
render_obj=db->CreateRenderable(primitive,material_instance,pipeline);
render_obj=db->CreateMesh(primitive,material_instance,pipeline);
return(true);
}

View File

@ -38,7 +38,7 @@ private:
MaterialInstance * mi_billboard =nullptr;
Pipeline * pipeline_billboard =nullptr;
Renderable * ro_billboard =nullptr;
Mesh * ro_billboard =nullptr;
Texture2D * texture =nullptr;
Sampler * sampler =nullptr;
@ -110,13 +110,13 @@ private:
return(true);
}
Renderable *Add(Primitive *r,MaterialInstance *mi,Pipeline *p)
Mesh *Add(Primitive *r,MaterialInstance *mi,Pipeline *p)
{
Renderable *ri=db->CreateRenderable(r,mi,p);
Mesh *ri=db->CreateMesh(r,mi,p);
if(!ri)
{
LOG_ERROR(OS_TEXT("Create Renderable failed."));
LOG_ERROR(OS_TEXT("Create Mesh failed."));
return(nullptr);
}
@ -151,7 +151,7 @@ private:
if(!pc.WriteVAB(VAN::Position,VF_V3F,position_data))
return(false);
ro_billboard=db->CreateRenderable(&pc,mi_billboard,pipeline_billboard);
ro_billboard=db->CreateMesh(&pc,mi_billboard,pipeline_billboard);
if(!ro_billboard)
return(false);
}

View File

@ -38,7 +38,7 @@ private:
SceneNode render_root;
MaterialInstance * material_instance =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
Pipeline * pipeline =nullptr;
@ -72,7 +72,7 @@ private:
bool InitVBO()
{
render_obj=CreateRenderable("Triangle",VERTEX_COUNT,material_instance,pipeline,
render_obj=CreateMesh("Triangle",VERTEX_COUNT,material_instance,pipeline,
{
{VAN::Position, VF_V2F, position_data},
{VAN::Color, VF_V4UN8, color_data }

View File

@ -38,7 +38,7 @@ private:
struct
{
MaterialInstance * mi;
Renderable * r;
Mesh * r;
}render_obj[DRAW_OBJECT_COUNT]{};
Pipeline * pipeline =nullptr;
@ -95,7 +95,7 @@ private:
for(uint i=0;i<DRAW_OBJECT_COUNT;i++)
{
render_obj[i].r=db->CreateRenderable(prim,render_obj[i].mi,pipeline);
render_obj[i].r=db->CreateMesh(prim,render_obj[i].mi,pipeline);
if(!render_obj[i].r)
return(false);

View File

@ -68,7 +68,7 @@ private:
#endif
MaterialInstance * material_instance =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
Pipeline * pipeline =nullptr;
@ -113,7 +113,7 @@ private:
Float32toFloat16(position_data_hf,position_data_float,VERTEX_COUNT*2);
#endif//USE_HALF_FLOAT_POSITION
render_obj=CreateRenderable("Triangle",VERTEX_COUNT,material_instance,pipeline,
render_obj=CreateMesh("Triangle",VERTEX_COUNT,material_instance,pipeline,
{
{VAN::Position,PositionFormat,position_data},
{VAN::Color, ColorFormat, color_data}

View File

@ -38,7 +38,7 @@ private:
Color4f clear_color =Color4f(0.2f,0.2f,0.2f,1.0f);
MaterialInstance * material_instance =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
Pipeline * pipeline =nullptr;
@ -85,7 +85,7 @@ private:
position_data[i][1]=position_data_float[i][1]*ext.height;
}
render_obj=CreateRenderable("Triangle",VERTEX_COUNT,material_instance,pipeline,
render_obj=CreateMesh("Triangle",VERTEX_COUNT,material_instance,pipeline,
{
{VAN::Position,POSITION_DATA_FORMAT,position_data},
{VAN::Color, COLOR_DATA_FORMAT, color_data}

View File

@ -34,7 +34,7 @@ private:
Color4f clear_color =Color4f(0.2f,0.2f,0.2f,1.0f);
MaterialInstance * material_instance =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
Pipeline * pipeline =nullptr;
@ -61,7 +61,7 @@ private:
bool InitVBO()
{
render_obj=CreateRenderable("Triangle",VERTEX_COUNT,material_instance,pipeline,
render_obj=CreateMesh("Triangle",VERTEX_COUNT,material_instance,pipeline,
{
{VAN::Position,VF_V2F,position_data},
{VAN::Color, VF_V4F,color_data}

View File

@ -15,7 +15,7 @@ private:
TextRender * text_render =nullptr;
TextPrimitive * text_primitive =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
public:
@ -44,7 +44,7 @@ private:
if(!text_primitive)
return(false);
render_obj=text_render->CreateRenderable(text_primitive);
render_obj=text_render->CreateMesh(text_primitive);
if(!render_obj)
return(false);

View File

@ -34,7 +34,7 @@ enum class GizmoShape:uint
bool InitGizmoResource(RenderResource *);
void FreeGizmoResource();
Renderable *GetGizmoRenderable(const GizmoShape &shape,const GizmoColor &color);
Mesh *GetGizmoRenderable(const GizmoShape &shape,const GizmoColor &color);
StaticMesh *GetGizmoMoveStaticMesh();
StaticMesh *GetGizmoScaleStaticMesh();

View File

@ -45,22 +45,22 @@ void ClearGizmoMoveStaticMesh()
bool InitGizmoMoveStaticMesh()
{
Renderable *sphere=GetGizmoRenderable(GizmoShape::Sphere,GizmoColor::White);
Renderable *cylinder[3]
Mesh *sphere=GetGizmoRenderable(GizmoShape::Sphere,GizmoColor::White);
Mesh *cylinder[3]
{
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Blue),
};
Renderable *cone[3]
Mesh *cone[3]
{
GetGizmoRenderable(GizmoShape::Cone,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cone,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cone,GizmoColor::Blue),
};
Renderable *circle[3]=
Mesh *circle[3]=
{
GetGizmoRenderable(GizmoShape::Circle,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Circle,GizmoColor::Green),

View File

@ -22,7 +22,7 @@ void ClearGizmoRotateStaticMesh()
bool InitGizmoRotateStaticMesh()
{
Renderable *torus[4]
Mesh *torus[4]
{
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Torus,GizmoColor::Green),

View File

@ -45,22 +45,22 @@ void ClearGizmoScaleStaticMesh()
bool InitGizmoScaleStaticMesh()
{
Renderable *center_cube=GetGizmoRenderable(GizmoShape::Cube,GizmoColor::White);
Renderable *cylinder[3]
Mesh *center_cube=GetGizmoRenderable(GizmoShape::Cube,GizmoColor::White);
Mesh *cylinder[3]
{
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cylinder,GizmoColor::Blue),
};
Renderable *cube[3]
Mesh *cube[3]
{
GetGizmoRenderable(GizmoShape::Cube,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Cube,GizmoColor::Green),
GetGizmoRenderable(GizmoShape::Cube,GizmoColor::Blue),
};
Renderable *square[3]=
Mesh *square[3]=
{
GetGizmoRenderable(GizmoShape::Square,GizmoColor::Red),
GetGizmoRenderable(GizmoShape::Square,GizmoColor::Green),

View File

@ -43,7 +43,7 @@ namespace
{
Primitive *prim;
Renderable *renderable[size_t(GizmoColor::RANGE_SIZE)];
Mesh *renderable[size_t(GizmoColor::RANGE_SIZE)];
};
GizmoRenderable gizmo_rederable[size_t(GizmoShape::RANGE_SIZE)]{};
@ -58,7 +58,7 @@ namespace
gr->prim=prim;
for(uint i=0;i<uint(GizmoColor::RANGE_SIZE);i++)
gr->renderable[i]=CreateRenderable(prim,gizmo_triangle.mi[i],p);
gr->renderable[i]=CreateMesh(prim,gizmo_triangle.mi[i],p);
}
bool InitMI(GizmoResource *gr)
@ -306,7 +306,7 @@ void FreeGizmoResource()
SAFE_CLEAR(gizmo_line.vdm);
}
Renderable *GetGizmoRenderable(const GizmoShape &shape,const GizmoColor &color)
Mesh *GetGizmoRenderable(const GizmoShape &shape,const GizmoColor &color)
{
if(!gizmo_rr)
return(nullptr);

View File

@ -35,7 +35,7 @@ constexpr const float GIZMO_CYLINDER_OFFSET =GIZMO_CYLINDER_HALF_LENGTH+GIZM
constexpr const float GIZMO_TWO_AXIS_OFFSET =5.0F; ///<二轴调节点偏移量(方片或圆)
Renderable *GetGizmoRenderable(const GizmoShape &gs,const GizmoColor &);
Mesh *GetGizmoRenderable(const GizmoShape &gs,const GizmoColor &);
StaticMesh *CreateGizmoStaticMesh(SceneNode *);

View File

@ -93,9 +93,9 @@ private:
return ro_plane;
}
Renderable *Add(MaterialInstance *mi,const Matrix4f &mat)
Mesh *Add(MaterialInstance *mi,const Matrix4f &mat)
{
Renderable *ri=db->CreateRenderable(ro_plane,mi,pipeline);
Mesh *ri=db->CreateMesh(ro_plane,mi,pipeline);
if(!ri)
return(nullptr);

View File

@ -74,9 +74,9 @@ private:
return prim_plane_grid;
}
Renderable *Add(MaterialInstance *mi,const Matrix4f &mat)
Mesh *Add(MaterialInstance *mi,const Matrix4f &mat)
{
Renderable *ri=db->CreateRenderable(prim_plane_grid,mi,pipeline);
Mesh *ri=db->CreateMesh(prim_plane_grid,mi,pipeline);
if(!ri)
return(nullptr);

View File

@ -92,13 +92,13 @@ private:
return(true);
}
Renderable *Add(Primitive *r,MaterialInstance *mi,Pipeline *p)
Mesh *Add(Primitive *r,MaterialInstance *mi,Pipeline *p)
{
Renderable *ri=db->CreateRenderable(r,mi,p);
Mesh *ri=db->CreateMesh(r,mi,p);
if(!ri)
{
LOG_ERROR(OS_TEXT("Create Renderable failed."));
LOG_ERROR(OS_TEXT("Create Mesh failed."));
return(nullptr);
}

View File

@ -243,7 +243,7 @@ private:
return(true);
}
Renderable *Add(Primitive *r,MaterialInstance *mi,Pipeline *p,const Matrix4f &mat=Identity4f)
Mesh *Add(Primitive *r,MaterialInstance *mi,Pipeline *p,const Matrix4f &mat=Identity4f)
{
if(!r)
return(nullptr);
@ -252,11 +252,11 @@ private:
if(!p)
return(nullptr);
Renderable *ri=db->CreateRenderable(r,mi,p);
Mesh *ri=db->CreateMesh(r,mi,p);
if(!ri)
{
LOG_ERROR("Create Renderable failed! Primitive: "+r->GetName());
LOG_ERROR("Create Mesh failed! Primitive: "+r->GetName());
return(nullptr);
}

View File

@ -44,7 +44,7 @@ private:
Sampler * sampler =nullptr;
Material * material =nullptr;
MaterialInstance * material_instance =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
Pipeline * pipeline =nullptr;
private:
@ -92,7 +92,7 @@ private:
if(!rpc.WriteVAB(VAN::Position, VF_V2F, position_data))return(false);
if(!rpc.WriteVAB(VAN::TexCoord, VF_V2F, tex_coord_data))return(false);
render_obj=db->CreateRenderable(&rpc,material_instance,pipeline);
render_obj=db->CreateMesh(&rpc,material_instance,pipeline);
return(render_obj);
}

View File

@ -40,7 +40,7 @@ private:
Sampler * sampler =nullptr;
Material * material =nullptr;
MaterialInstance * material_instance =nullptr;
Renderable * render_obj =nullptr;
Mesh * render_obj =nullptr;
Pipeline * pipeline =nullptr;
private:
@ -88,7 +88,7 @@ private:
if(!rpc.WriteVAB(VAN::Position,VF_V4F,position_data))return(false);
if(!rpc.WriteVAB(VAN::TexCoord,VF_V4F,tex_coord_data))return(false);
render_obj=db->CreateRenderable(&rpc,material_instance,pipeline);
render_obj=db->CreateMesh(&rpc,material_instance,pipeline);
return(render_obj);
}

View File

@ -61,7 +61,7 @@ private:
struct
{
MaterialInstance * mi;
Renderable * r;
Mesh * r;
}render_obj[TexCount]{};
private:
@ -144,7 +144,7 @@ private:
for(uint32_t i=0;i<TexCount;i++)
{
render_obj[i].r=db->CreateRenderable(prim_rectangle,render_obj[i].mi,pipeline);
render_obj[i].r=db->CreateMesh(prim_rectangle,render_obj[i].mi,pipeline);
if(!render_obj[i].r)
return(false);

View File

@ -5,7 +5,7 @@
#include<hgl/filesystem/FileSystem.h>
#include<hgl/graph/InlineGeometry.h>
#include<hgl/graph/VKRenderResource.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/RenderList.h>
using namespace hgl;

View File

@ -5,7 +5,7 @@
#include<hgl/filesystem/FileSystem.h>
#include<hgl/graph/InlineGeometry.h>
#include<hgl/graph/VKRenderResource.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/VKTexture.h>
#include<hgl/graph/RenderList.h>

View File

@ -4,7 +4,7 @@
#include<hgl/filesystem/FileSystem.h>
#include<hgl/graph/InlineGeometry.h>
#include<hgl/graph/VKRenderResource.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/RenderList.h>
#include<hgl/graph/VKTexture.h>
#include<hgl/graph/VKImageView.h>

View File

@ -5,7 +5,7 @@
#include<hgl/filesystem/FileSystem.h>
#include<hgl/graph/InlineGeometry.h>
#include<hgl/graph/VKRenderResource.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/VKTexture.h>
#include<hgl/graph/RenderList.h>

View File

@ -5,7 +5,7 @@
#include<hgl/filesystem/FileSystem.h>
#include<hgl/graph/InlineGeometry.h>
#include<hgl/graph/VKRenderResource.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/VKTexture.h>
#include<hgl/graph/RenderList.h>

View File

@ -220,7 +220,7 @@ public:
}
}
bool BuildCommandBuffer(RenderCmdBuffer *cb,Framebuffer *fbo,Renderable *ri)
bool BuildCommandBuffer(RenderCmdBuffer *cb,Framebuffer *fbo,Mesh *ri)
{
if(!ri)return(false);
@ -238,7 +238,7 @@ public:
return(true);
}
bool BuildCommandBuffer(uint32_t index,Renderable *ri)
bool BuildCommandBuffer(uint32_t index,Mesh *ri)
{
if(!ri)return(false);
@ -246,7 +246,7 @@ public:
sc_render_target->GetFramebuffer(),ri);
}
bool BuildCommandBuffer(Renderable *ri)
bool BuildCommandBuffer(Mesh *ri)
{
if(!ri)return(false);
@ -256,7 +256,7 @@ public:
return(true);
}
bool BuildCurrentCommandBuffer(Renderable *ri)
bool BuildCurrentCommandBuffer(Mesh *ri)
{
if(!ri)return(false);

View File

@ -91,7 +91,7 @@ namespace hgl
const graph::VIL *vil,
const std::initializer_list<graph::VertexAttribDataPtr> &vad_list);
graph::Renderable *CreateRenderable(const AnsiString &name,
graph::Mesh *CreateMesh(const AnsiString &name,
const uint32_t vertices_count,
graph::MaterialInstance *mi,
graph::Pipeline *pipeline,

View File

@ -1,13 +1,13 @@
#pragma once
#include<hgl/component/PrimitiveComponent.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
COMPONENT_NAMESPACE_BEGIN
struct StaticMeshComponentData:public ComponentData
{
Renderable *renderable;
Mesh *renderable;
};//struct StaticMeshComponentData
class StaticMeshComponent;

View File

@ -68,12 +68,12 @@ private:
MaterialInstance * mi;
const PrimitiveDataBuffer * pdb;
const PrimitiveRenderData * prd;
const MeshDataBuffer * pdb;
const MeshRenderData * prd;
public:
void Set(Renderable *);
void Set(Mesh *);
};
IndirectDrawBuffer *icb_draw;
@ -92,14 +92,14 @@ protected:
VABList * vab_list;
const PrimitiveDataBuffer * last_data_buffer;
const MeshDataBuffer * last_data_buffer;
const VDM * last_vdm;
const PrimitiveRenderData * last_render_data;
const MeshRenderData * last_render_data;
int first_indirect_draw_index=-1;
uint indirect_draw_count=0;
bool BindVAB(const PrimitiveDataBuffer *,const uint);
bool BindVAB(const MeshDataBuffer *,const uint);
void ProcIndirectRender();
void Render(RenderItem *);

View File

@ -12,7 +12,7 @@ VK_NAMESPACE_BEGIN
* <Br>
*
*/
struct PrimitiveDataBuffer:public Comparator<PrimitiveDataBuffer>
struct MeshDataBuffer:public Comparator<MeshDataBuffer>
{
uint32_t vab_count;
VkBuffer * vab_list;
@ -29,17 +29,17 @@ struct PrimitiveDataBuffer:public Comparator<PrimitiveDataBuffer>
public:
PrimitiveDataBuffer(const uint32_t,IndexBuffer *,VertexDataManager *_v=nullptr);
~PrimitiveDataBuffer();
MeshDataBuffer(const uint32_t,IndexBuffer *,VertexDataManager *_v=nullptr);
~MeshDataBuffer();
const int compare(const PrimitiveDataBuffer &pdb)const override;
};//struct PrimitiveDataBuffer
const int compare(const MeshDataBuffer &pdb)const override;
};//struct MeshDataBuffer
/**
* <Br>
*
*/
struct PrimitiveRenderData:public ComparatorData<PrimitiveRenderData>
struct MeshRenderData:public ComparatorData<MeshRenderData>
{
//因为要VAB是流式访问所以我们这个结构会被用做排序依据
//也因此把vertex_offset放在最前面
@ -52,7 +52,7 @@ struct PrimitiveRenderData:public ComparatorData<PrimitiveRenderData>
public:
PrimitiveRenderData(const uint32_t vc,const uint32_t ic,const int32_t vo=0,const uint32_t fi=0)
MeshRenderData(const uint32_t vc,const uint32_t ic,const int32_t vo=0,const uint32_t fi=0)
{
vertex_count =vc;
index_count =ic;
@ -62,32 +62,31 @@ public:
};
/**
* ()
* StaticMesh哦
* ()
*/
class Renderable ///可渲染对象实例
class Mesh
{
Pipeline * pipeline;
MaterialInstance * mat_inst;
Primitive * primitive;
PrimitiveDataBuffer * primitive_data_buffer;
PrimitiveRenderData * primitive_render_data;
MeshDataBuffer * data_buffer;
MeshRenderData * render_data;
private:
friend Renderable *CreateRenderable(Primitive *,MaterialInstance *,Pipeline *);
friend Mesh *CreateMesh(Primitive *,MaterialInstance *,Pipeline *);
Renderable(Primitive *,MaterialInstance *,Pipeline *,PrimitiveDataBuffer *,PrimitiveRenderData *);
Mesh(Primitive *,MaterialInstance *,Pipeline *,MeshDataBuffer *,MeshRenderData *);
public:
virtual ~Renderable()
virtual ~Mesh()
{
//需要在这里添加删除pipeline/desc_sets/primitive引用计数的代码
SAFE_CLEAR(primitive_data_buffer);
SAFE_CLEAR(primitive_render_data);
SAFE_CLEAR(data_buffer);
SAFE_CLEAR(render_data);
}
void UpdatePipeline (Pipeline *p){pipeline=p;}
@ -99,8 +98,8 @@ public:
Primitive * GetPrimitive (){return primitive;}
const AABB & GetBoundingBox ()const{return primitive->GetBoundingBox();}
const PrimitiveDataBuffer *GetDataBuffer ()const{return primitive_data_buffer;}
const PrimitiveRenderData *GetRenderData ()const{return primitive_render_data;}
const MeshDataBuffer * GetDataBuffer ()const{return data_buffer;}
const MeshRenderData * GetRenderData ()const{return render_data;}
public:
@ -115,7 +114,7 @@ public:
mat_inst=mi;
return(true);
}
};//class Renderable
};//class Mesh
Renderable *CreateRenderable(Primitive *,MaterialInstance *,Pipeline *);
Mesh *CreateMesh(Primitive *,MaterialInstance *,Pipeline *);
VK_NAMESPACE_END

View File

@ -7,7 +7,7 @@ namespace hgl
{
namespace graph
{
class Renderable;
class Mesh;
class MaterialInstance;
class SceneNode;

View File

@ -31,7 +31,7 @@ namespace hgl
AABB LocalBoundingBox; ///<本地坐标绑定盒
//AABB WorldBoundingBox; ///<世界坐标绑定盒
Renderable *render_obj=nullptr; ///<可渲染实例
Mesh *render_obj=nullptr; ///<可渲染实例
protected:
@ -51,9 +51,9 @@ namespace hgl
SceneNode(const SceneNode &)=delete;
SceneNode(const SceneNode *)=delete;
SceneNode(const SceneOrient &so ):SceneOrient(so) {}
SceneNode( Renderable *ri ) {render_obj=ri;}
SceneNode( Mesh *ri ) {render_obj=ri;}
SceneNode(const Matrix4f &mat ):SceneOrient(mat) {}
SceneNode(const Matrix4f &mat, Renderable *ri ):SceneOrient(mat) {render_obj=ri;}
SceneNode(const Matrix4f &mat, Mesh *ri ):SceneOrient(mat) {render_obj=ri;}
public:
@ -85,9 +85,9 @@ namespace hgl
SceneNode * GetParent() noexcept{return ParentNode;}
const SceneNode * GetParent()const noexcept{return ParentNode;}
void SetRenderable(Renderable *);
Renderable *GetRenderable() noexcept{return render_obj;}
const Renderable *GetRenderable()const noexcept{return render_obj;}
void SetRenderable(Mesh *);
Mesh * GetRenderable() noexcept{return render_obj;}
const Mesh * GetRenderable()const noexcept{return render_obj;}
SceneNode *Add(SceneNode *sn)
{

View File

@ -73,8 +73,8 @@ class DeviceBuffer;
struct DeviceBufferData;
template<typename T> class DeviceBufferMap;
struct PrimitiveDataBuffer;
struct PrimitiveRenderData;
struct MeshDataBuffer;
struct MeshRenderData;
class VertexAttribBuffer;
using VAB=VertexAttribBuffer;
@ -123,7 +123,7 @@ using VIL=VertexInputLayout;
class PrimitiveData;
class Primitive;
class Renderable;
class Mesh;
class VertexDataManager;
using VDM=VertexDataManager;

View File

@ -4,7 +4,7 @@
#include<hgl/graph/VKVABList.h>
#include<hgl/graph/VKPipeline.h>
#include<hgl/graph/VKDescriptorSet.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/color/Color4f.h>
VK_NAMESPACE_BEGIN
class VulkanCmdBuffer
@ -202,7 +202,7 @@ public:
void BindIBO(IndexBuffer *,const VkDeviceSize byte_offset=0);
bool BindDataBuffer(const PrimitiveDataBuffer *);
bool BindDataBuffer(const MeshDataBuffer *);
void SetViewport (uint32_t first,uint32_t count,const VkViewport *vp) {vkCmdSetViewport(cmd_buf,first,count,vp);}
void SetScissor (uint32_t first,uint32_t count,const VkRect2D *sci) {vkCmdSetScissor(cmd_buf,first,count,sci);}
@ -239,13 +239,13 @@ public: //draw
void DrawIndirect (VkBuffer buf, uint32_t drawCount,uint32_t stride=sizeof(VkDrawIndirectCommand )){return DrawIndirect( 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 PrimitiveDataBuffer *prb,const PrimitiveRenderData *prd,const uint32_t instance_count=1,const uint32_t first_instance=0);
void Draw (const MeshDataBuffer *prb,const MeshRenderData *prd,const uint32_t instance_count=1,const uint32_t first_instance=0);
public: //dynamic state
public:
void Render(Renderable *ri)
void Render(Mesh *ri)
{
if(!ri)return;

View File

@ -11,7 +11,7 @@
#include<hgl/graph/VKTexture.h>
#include<hgl/graph/VKMaterialParameters.h>
#include<hgl/graph/VKMaterialInstance.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/font/TextPrimitive.h>
#include<hgl/type/ObjectManage.h>
#include<hgl/shadergen/MaterialCreateInfo.h>
@ -54,7 +54,7 @@ class RenderResource
IDObjectManage<PrimitiveID, Primitive> rm_primitives; ///<图元合集
IDObjectManage<BufferID, DeviceBuffer> rm_buffers; ///<顶点缓冲区合集
IDObjectManage<SamplerID, Sampler> rm_samplers; ///<采样器合集
IDObjectManage<RenderableID, Renderable> rm_renderables; ///<渲染实例集合集
IDObjectManage<RenderableID, Mesh> rm_renderables; ///<渲染实例集合集
private:
@ -97,7 +97,7 @@ public: //添加数据到管理器如果指针为nullptr会返回-1
PrimitiveID Add(Primitive * p ){return rm_primitives.Add(p);}
BufferID Add(DeviceBuffer * buf ){return rm_buffers.Add(buf);}
SamplerID Add(Sampler * s ){return rm_samplers.Add(s);}
RenderableID Add(Renderable * r ){return rm_renderables.Add(r);}
RenderableID Add(Mesh * r ){return rm_renderables.Add(r);}
public: // VAB/VAO
@ -143,8 +143,8 @@ public: //Material
MaterialInstance * CreateMaterialInstance(const AnsiString &mtl_name,const mtl::MaterialCreateInfo *,const VILConfig *vil_cfg=nullptr);
Renderable * CreateRenderable(Primitive *r,MaterialInstance *mi,Pipeline *p);
Renderable * CreateRenderable(PrimitiveCreater *pc,MaterialInstance *mi,Pipeline *p);
Mesh * CreateMesh(Primitive *r,MaterialInstance *mi,Pipeline *p);
Mesh * CreateMesh(PrimitiveCreater *pc,MaterialInstance *mi,Pipeline *p);
Sampler * CreateSampler(VkSamplerCreateInfo *sci=nullptr);
Sampler * CreateSampler(Texture *);
@ -157,7 +157,7 @@ public: //Get
Primitive * GetPrimitive (const PrimitiveID &id){return rm_primitives.Get(id);}
DeviceBuffer * GetBuffer (const BufferID &id){return rm_buffers.Get(id);}
Sampler * GetSampler (const SamplerID &id){return rm_samplers.Get(id);}
Renderable * GetRenderable (const RenderableID &id){return rm_renderables.Get(id);}
Mesh * GetRenderable (const RenderableID &id){return rm_renderables.Get(id);}
public: //Release
@ -167,7 +167,7 @@ public: //Release
void Release(Primitive * p ){rm_primitives.Release(p);}
void Release(DeviceBuffer * buf ){rm_buffers.Release(buf);}
void Release(Sampler * s ){rm_samplers.Release(s);}
void Release(Renderable * r ){rm_renderables.Release(r);}
void Release(Mesh * r ){rm_renderables.Release(r);}
};//class RenderResource
/**

View File

@ -44,7 +44,7 @@ namespace hgl
bool WriteVertex (const int16 *fp);
bool WriteTexCoord (const float *fp);
};//class TextPrimitive:public Renderable
};//class TextPrimitive:public Mesh
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_FONT_PRIMITIVE_INCLUDE

View File

@ -58,7 +58,7 @@ namespace hgl
bool Layout(TextPrimitive *tr,const U16String &str);
Renderable *CreateRenderable(TextPrimitive *text_primitive);
Mesh *CreateMesh(TextPrimitive *text_primitive);
void Release(TextPrimitive *);
};//class TextRender

View File

@ -23,7 +23,9 @@ SET(SG_PRIMITIVE_SOURCE ${SG_INCLUDE_PATH}/VKPrimitive.h
SOURCE_GROUP("Primitive" FILES ${SG_PRIMITIVE_SOURCE})
SET(TILE_SOURCE ${SG_INCLUDE_PATH}/TileData.h
TileData.cpp)
TileData.cpp
Vulkan/VKTileData.cpp
Vulkan/VKTileFont.cpp)
SOURCE_GROUP("Tile" FILES ${TILE_SOURCE})
@ -282,12 +284,10 @@ SET(VK_CMD_BUFFER_SOURCE ${SG_INCLUDE_PATH}/VKCommandBuffer.h
SOURCE_GROUP("Vulkan\\Command Buffer" FILES ${VK_CMD_BUFFER_SOURCE})
SET(VK_RENDERABLE_SOURCE ${SG_INCLUDE_PATH}/VKRenderable.h
Vulkan/VKRenderable.cpp
Vulkan/VKTileData.cpp
Vulkan/VKTileFont.cpp)
SET(VK_MESH_SOURCE ${SG_INCLUDE_PATH}/Mesh.h
Vulkan/Mesh.cpp)
SOURCE_GROUP("Vulkan\\Renderable" FILES ${VK_RENDERABLE_SOURCE})
SOURCE_GROUP("Vulkan\\Mesh" FILES ${VK_MESH_SOURCE})
set(COMPONENT_INCLUDE_PATH ${ROOT_INCLUDE_PATH}/hgl/component)
@ -361,7 +361,7 @@ SET(VULKAN_RENDER_SOURCE ${VK_RR_SOURCE}
${VK_RENDER_TARGET_SOURCE}
#${VK_RENDER_CONTEXT_SOURCE}
${VK_CMD_BUFFER_SOURCE}
${VK_RENDERABLE_SOURCE}
${VK_MESH_SOURCE}
${VK_RENDER_DEVICE_SOURCE})
add_cm_library(ULRE.SceneGraph "ULRE" ${SCENE_GRAPH_FILES}

View File

@ -1,4 +1,4 @@
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/VKMaterialInstance.h>
#include<hgl/graph/VKMaterialParameters.h>
#include<hgl/graph/VKMaterial.h>
@ -7,7 +7,7 @@
#include<hgl/log/LogInfo.h>
VK_NAMESPACE_BEGIN
PrimitiveDataBuffer::PrimitiveDataBuffer(const uint32_t c,IndexBuffer *ib,VertexDataManager *_vdm)
MeshDataBuffer::MeshDataBuffer(const uint32_t c,IndexBuffer *ib,VertexDataManager *_vdm)
{
vab_count=c;
@ -18,13 +18,13 @@ PrimitiveDataBuffer::PrimitiveDataBuffer(const uint32_t c,IndexBuffer *ib,Vertex
vdm=_vdm;
}
PrimitiveDataBuffer::~PrimitiveDataBuffer()
MeshDataBuffer::~MeshDataBuffer()
{
delete[] vab_offset;
delete[] vab_list;
}
const int PrimitiveDataBuffer::compare(const PrimitiveDataBuffer &pdb)const
const int MeshDataBuffer::compare(const MeshDataBuffer &pdb)const
{
ptrdiff_t off;
@ -52,17 +52,17 @@ const int PrimitiveDataBuffer::compare(const PrimitiveDataBuffer &pdb)const
return off;
}
Renderable::Renderable(Primitive *r,MaterialInstance *mi,Pipeline *p,PrimitiveDataBuffer *pdb,PrimitiveRenderData *prd)
Mesh::Mesh(Primitive *r,MaterialInstance *mi,Pipeline *p,MeshDataBuffer *pdb,MeshRenderData *prd)
{
primitive=r;
pipeline=p;
mat_inst=mi;
primitive_data_buffer=pdb;
primitive_render_data=prd;
data_buffer=pdb;
render_data=prd;
}
Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
Mesh *CreateMesh(Primitive *prim,MaterialInstance *mi,Pipeline *p)
{
if(!prim||!mi||!p)return(nullptr);
@ -76,13 +76,13 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
if(prim->GetVABCount()<input_count) //小于材质要求的数量?那自然是不行的
{
LOG_ERROR("[FATAL ERROR] input buffer count of Renderable lesser than Material, Material name: "+mtl_name);
LOG_ERROR("[FATAL ERROR] input buffer count of Mesh lesser than Material, Material name: "+mtl_name);
return(nullptr);
}
PrimitiveDataBuffer *pdb=new PrimitiveDataBuffer(input_count,prim->GetIBO(),prim->GetVDM());
PrimitiveRenderData *prd=new PrimitiveRenderData(prim->GetVertexCount(),prim->GetIndexCount(),prim->GetVertexOffset(),prim->GetFirstIndex());
MeshDataBuffer *pdb=new MeshDataBuffer(input_count,prim->GetIBO(),prim->GetVDM());
MeshRenderData *prd=new MeshRenderData(prim->GetVertexCount(),prim->GetIndexCount(),prim->GetVertexOffset(),prim->GetFirstIndex());
const VertexInputFormat *vif=vil->GetVIFList(VertexInputGroup::Basic);
@ -104,7 +104,7 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
if(vab->GetFormat()!=vif->format)
{
LOG_ERROR( "[FATAL ERROR] VAB \""+AnsiString(vif->name)+
AnsiString("\" format can't match Renderable, Material(")+mtl_name+
AnsiString("\" format can't match Mesh, Material(")+mtl_name+
AnsiString(") Format(")+GetVulkanFormatName(vif->format)+
AnsiString("), VAB Format(")+GetVulkanFormatName(vab->GetFormat())+
")");
@ -114,7 +114,7 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
if(vab->GetStride()!=vif->stride)
{
LOG_ERROR( "[FATAL ERROR] VAB \""+AnsiString(vif->name)+
AnsiString("\" stride can't match Renderable, Material(")+mtl_name+
AnsiString("\" stride can't match Mesh, Material(")+mtl_name+
AnsiString(") stride(")+AnsiString::numberOf(vif->stride)+
AnsiString("), VAB stride(")+AnsiString::numberOf(vab->GetStride())+
")");
@ -126,6 +126,6 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p)
++vif;
}
return(new Renderable(prim,mi,p,pdb,prd));
return(new Mesh(prim,mi,p,pdb,prd));
}
VK_NAMESPACE_END

View File

@ -1,7 +1,7 @@
#include<hgl/graph/VKCommandBuffer.h>
#include<hgl/graph/VKRenderPass.h>
#include<hgl/graph/VKFramebuffer.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/VKDeviceAttribute.h>
#include<hgl/graph/VKPhysicalDevice.h>
#include<hgl/graph/VKIndexBuffer.h>
@ -134,7 +134,7 @@ void RenderCmdBuffer::BindIBO(IndexBuffer *ibo,const VkDeviceSize byte_offset)
VkIndexType(ibo->GetType()));
}
bool RenderCmdBuffer::BindDataBuffer(const PrimitiveDataBuffer *pdb)
bool RenderCmdBuffer::BindDataBuffer(const MeshDataBuffer *pdb)
{
if(!pdb)
return(false);
@ -178,7 +178,7 @@ void RenderCmdBuffer::DrawIndexedIndirect( VkBuffer buffer,
vkCmdDrawIndexedIndirect(cmd_buf,buffer,offset+i*stride,1,stride);
}
void RenderCmdBuffer::Draw(const PrimitiveDataBuffer *pdb,const PrimitiveRenderData *prd,const uint32_t instance_count,const uint32_t first_instance)
void RenderCmdBuffer::Draw(const MeshDataBuffer *pdb,const MeshRenderData *prd,const uint32_t instance_count,const uint32_t first_instance)
{
if(!pdb||!prd)
return;

View File

@ -12,7 +12,7 @@
VK_NAMESPACE_BEGIN
//bool Renderable::Set(const int stage_input_binding,VIL *vil,VkDeviceSize offset)
//bool Mesh::Set(const int stage_input_binding,VIL *vil,VkDeviceSize offset)
//{
// if(stage_input_binding<0||stage_input_binding>=buf_count||!vil)return(false);
//

View File

@ -1,6 +1,6 @@
#include<hgl/graph/VKRenderResource.h>
#include<hgl/graph/VKDevice.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/VKInlinePipeline.h>
#include<hgl/graph/VKVertexAttribBuffer.h>
#include<hgl/graph/VKIndexBuffer.h>
@ -80,12 +80,12 @@ MaterialInstance *RenderResource::CreateMaterialInstance(const AnsiString &mtl_n
return CreateMaterialInstance(mtl,vil_cfg);
}
Renderable *RenderResource::CreateRenderable(Primitive *r,MaterialInstance *mi,Pipeline *p)
Mesh *RenderResource::CreateMesh(Primitive *r,MaterialInstance *mi,Pipeline *p)
{
if(!p||!mi||!r)
return(nullptr);
Renderable *ri=VK_NAMESPACE::CreateRenderable(r,mi,p);
Mesh *ri=VK_NAMESPACE::CreateMesh(r,mi,p);
if(ri)
Add(ri);
@ -93,7 +93,7 @@ Renderable *RenderResource::CreateRenderable(Primitive *r,MaterialInstance *mi,P
return ri;
}
Renderable *RenderResource::CreateRenderable(PrimitiveCreater *pc,MaterialInstance *mi,Pipeline *p)
Mesh *RenderResource::CreateMesh(PrimitiveCreater *pc,MaterialInstance *mi,Pipeline *p)
{
if(!p||!mi||!pc)
return(nullptr);
@ -103,7 +103,7 @@ Renderable *RenderResource::CreateRenderable(PrimitiveCreater *pc,MaterialInstan
if(!prim)
return(nullptr);
Renderable *ri=VK_NAMESPACE::CreateRenderable(prim,mi,p);
Mesh *ri=VK_NAMESPACE::CreateMesh(prim,mi,p);
if(ri)
{

View File

@ -1,5 +1,5 @@
#include<hgl/graph/MaterialRenderList.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/VKDevice.h>
#include<hgl/graph/VKCommandBuffer.h>
#include<hgl/graph/VKVertexInput.h>
@ -31,8 +31,8 @@ const int RenderNode::compare(const RenderNode &other)const
{
hgl::int64 off;
hgl::graph::Renderable *ri_one=other.scene_node->GetRenderable();
hgl::graph::Renderable *ri_two=scene_node->GetRenderable();
hgl::graph::Mesh *ri_one=other.scene_node->GetRenderable();
hgl::graph::Mesh *ri_two=scene_node->GetRenderable();
auto *prim_one=ri_one->GetPrimitive();
auto *prim_two=ri_two->GetPrimitive();
@ -203,7 +203,7 @@ void MaterialRenderList::UpdateMaterialInstance(SceneNode *sn)
}
}
void MaterialRenderList::RenderItem::Set(Renderable *ri)
void MaterialRenderList::RenderItem::Set(Mesh *ri)
{
mi =ri->GetMaterialInstance();
pdb =ri->GetDataBuffer();
@ -261,7 +261,7 @@ void MaterialRenderList::Stat()
ri_array.Alloc(count);
RenderItem *ri=ri_array.GetData();
Renderable *ro=rn->scene_node->GetRenderable();
Mesh *ro=rn->scene_node->GetRenderable();
ri_count=1;
@ -324,14 +324,14 @@ void MaterialRenderList::Stat()
icb_draw_indexed->Unmap();
}
bool MaterialRenderList::BindVAB(const PrimitiveDataBuffer *pdb,const uint ri_index)
bool MaterialRenderList::BindVAB(const MeshDataBuffer *pdb,const uint ri_index)
{
//binding号都是在VertexInput::CreateVIL时连续紧密排列生成的所以bind时first_binding写0就行了。
//const VIL *vil=last_vil;
//if(vil->GetCount(VertexInputGroup::Basic)!=prb->vab_count)
// return(false); //这里基本不太可能因为CreateRenderable时就会检查值是否一样
// return(false); //这里基本不太可能因为CreateMesh时就会检查值是否一样
vab_list->Restart();

View File

@ -4,7 +4,7 @@
#include<hgl/graph/VKMaterialInstance.h>
#include<hgl/graph/SceneNode.h>
#include<hgl/graph/RenderNode.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
#include<hgl/graph/VKRenderAssign.h>
#include<hgl/graph/mtl/UBOCommon.h>

View File

@ -4,7 +4,7 @@
#include<hgl/graph/VK.h>
#include<hgl/graph/VKCommandBuffer.h>
#include<hgl/graph/VKMaterial.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
namespace hgl
{
@ -22,7 +22,7 @@ namespace hgl
{
if(!sn)return(false);
Renderable *ri=sn->GetRenderable();
Mesh *ri=sn->GetRenderable();
if(ri)
{
@ -89,7 +89,7 @@ namespace hgl
{
if(!sn)return;
Renderable *ri=sn->GetRenderable();
Mesh *ri=sn->GetRenderable();
if(!ri)return;

View File

@ -1,5 +1,5 @@
#include<hgl/graph/SceneNode.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/Mesh.h>
namespace hgl
{
namespace graph
@ -21,7 +21,7 @@ namespace hgl
return node;
}
void SceneNode::SetRenderable(Renderable *ri)
void SceneNode::SetRenderable(Mesh *ri)
{
render_obj=ri;

View File

@ -98,7 +98,7 @@ namespace hgl
return prim;
}
graph::Renderable *WorkObject::CreateRenderable( const AnsiString &name,
graph::Mesh *WorkObject::CreateMesh( const AnsiString &name,
const uint32_t vertices_count,
graph::MaterialInstance *mi,
graph::Pipeline *pipeline,
@ -109,6 +109,6 @@ namespace hgl
if(!prim)
return(nullptr);
return db->CreateRenderable(prim,mi,pipeline);
return db->CreateMesh(prim,mi,pipeline);
}
}//namespcae hgl