optimized first_triangle based on RenderablePrimitiveCreater class.

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-02-23 13:49:18 +08:00
parent a6b71a449e
commit 844636a46b
3 changed files with 59 additions and 5 deletions

View File

@ -6,6 +6,7 @@
#include<hgl/math/HalfFloat.h>
#include<hgl/filesystem/FileSystem.h>
#include<hgl/graph/SceneInfo.h>
#include<hgl/graph/VKRenderablePrimitiveCreater.h>
using namespace hgl;
using namespace hgl::graph;
@ -96,17 +97,16 @@ private:
bool InitVBO()
{
Primitive *primitive=db->CreatePrimitive(VERTEX_COUNT);
if(!primitive)return(false);
RenderablePrimitiveCreater rpc(db,VERTEX_COUNT);
#ifdef USE_HALF_FLOAT_POSITION
Float32toFloat16(position_data_hf,position_data_float,VERTEX_COUNT*2);
#endif//USE_HALF_FLOAT_POSITION
if(!primitive->Set(VAN::Position, db->CreateVBO(PositionFormat, VERTEX_COUNT,position_data )))return(false);
if(!primitive->Set(VAN::Color, db->CreateVBO(ColorFormat, VERTEX_COUNT,color_data )))return(false);
if(!rpc.SetVBO(VAN::Position, PositionFormat, position_data))return(false);
if(!rpc.SetVBO(VAN::Color, ColorFormat, color_data ))return(false);
render_obj=db->CreateRenderable(primitive,material_instance,pipeline);
render_obj=rpc.Create(material_instance,pipeline);
return(render_obj);
}

View File

@ -0,0 +1,53 @@
#ifndef HGL_VK_RENDERABLE_PRIMITIVE_CREATER_INCLUDE
#define HGL_VK_RENDERABLE_PRIMITIVE_CREATER_INCLUDE
#include<hgl/graph/VKRenderResource.h>
VK_NAMESPACE_BEGIN
class RenderablePrimitiveCreater
{
RenderResource *rr;
uint32_t vertex_count;
Primitive *prim;
public:
RenderablePrimitiveCreater(RenderResource *_rr,uint32_t vc)
{
rr=_rr;
vertex_count=vc;
prim=rr->CreatePrimitive(vertex_count);
}
bool SetVBO(const AnsiString &name,const VkFormat &fmt,const void *buf)
{
VBO *vbo=rr->CreateVBO(fmt,vertex_count,buf);
if(!vbo)
return(false);
prim->Set(name,vbo);
return(true);
}
bool SetIBO(const IndexType &it,const void *buf)
{
IndexBuffer *ibo=rr->CreateIBO(it,vertex_count,buf);
if(!ibo)
return(false);
prim->Set(ibo);
return(true);
}
Renderable *Create(MaterialInstance *mi,Pipeline *p)
{
return rr->CreateRenderable(prim,mi,p);
}
};//class RenderablePrimitiveCreater
VK_NAMESPACE_END
#endif // HGL_VK_RENDERABLE_PRIMITIVE_CREATER_INCLUDE

View File

@ -83,6 +83,7 @@ SOURCE_GROUP("Header Files" FILES ${SCENE_GRAPH_HEADER})
SOURCE_GROUP("Source Files" FILES ${SCENE_GRAPH_SOURCE})
SET(VK_RR_SOURCE ${SG_INCLUDE_PATH}/VKRenderResource.h
${SG_INCLUDE_PATH}/VKRenderablePrimitiveCreater.h
Vulkan/VKRenderResource.cpp
Vulkan/VKRenderResourceMaterial.cpp)