diff --git a/example/Vulkan/first_triangle.cpp b/example/Vulkan/first_triangle.cpp index ba81278b..8e97f483 100644 --- a/example/Vulkan/first_triangle.cpp +++ b/example/Vulkan/first_triangle.cpp @@ -6,6 +6,7 @@ #include #include #include +#include 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); } diff --git a/inc/hgl/graph/VKRenderablePrimitiveCreater.h b/inc/hgl/graph/VKRenderablePrimitiveCreater.h new file mode 100644 index 00000000..37cc7c62 --- /dev/null +++ b/inc/hgl/graph/VKRenderablePrimitiveCreater.h @@ -0,0 +1,53 @@ +#ifndef HGL_VK_RENDERABLE_PRIMITIVE_CREATER_INCLUDE +#define HGL_VK_RENDERABLE_PRIMITIVE_CREATER_INCLUDE + +#include + +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 \ No newline at end of file diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 8cc0bb09..23ea9ad0 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -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)