diff --git a/.gitignore b/.gitignore index 69e0ad4e..b6b1689e 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,9 @@ *.obj .vs /build +*.ninja_deps +*.ninja_log +*.pdb +*.lib +*.ninja +*.check_cache diff --git a/CMCMakeModule b/CMCMakeModule index 32199158..7eb1cafe 160000 --- a/CMCMakeModule +++ b/CMCMakeModule @@ -1 +1 @@ -Subproject commit 321991587905e07076574f104831bc8457f630b3 +Subproject commit 7eb1cafe575cc305a9d09fce66494a5445da5305 diff --git a/CMCore b/CMCore index 353bdef6..40354767 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 353bdef68b704d92a82adc55e65a0627bc857b54 +Subproject commit 4035476785e786ce701d0b4434d2916c161d9755 diff --git a/inc/hgl/graph/RenderableCreater.h b/inc/hgl/graph/RenderableCreater.h new file mode 100644 index 00000000..6d44a890 --- /dev/null +++ b/inc/hgl/graph/RenderableCreater.h @@ -0,0 +1,49 @@ +#ifndef HGL_GRAPH_RENDERABLE_CREATER_INCLUDE +#define HGL_GRAPH_RENDERABLE_CREATER_INCLUDE + +#include +#include +namespace hgl +{ + namespace graph + { + /** + * 可渲染对象创建器 + */ + class RenderableCreater + { + protected: + + SceneDB *db; + vulkan::Material *mtl; + + const vulkan::VertexShaderModule *vsm; + + protected: + + vulkan::Renderable * render_obj; + + uint32 vertices_number; + + VertexBufferCreater * vb_vertex; + vulkan::IndexBuffer * ibo; + + Map vb_map; + + public: + + RenderableCreater(SceneDB *sdb,vulkan::Material *m); + virtual ~RenderableCreater(); + + virtual bool Init(const uint32 count); + + virtual VertexBufferCreater * Bind(const AnsiString &name); + + uint16 * CreateIBO16(uint count,const uint16 *data=nullptr); + uint32 * CreateIBO32(uint count,const uint32 *data=nullptr); + + virtual vulkan::Renderable * Finish(); + };//class GeometryCreater + }//namespace graph +}//namespace hgl +#endif//HGL_GRAPH_RENDERABLE_CREATER_INCLUDE diff --git a/inc/hgl/graph/font/TextLayout.h b/inc/hgl/graph/font/TextLayout.h new file mode 100644 index 00000000..23d02d98 --- /dev/null +++ b/inc/hgl/graph/font/TextLayout.h @@ -0,0 +1,32 @@ +#ifndef HGL_GRAPH_TEXT_LAYOUT_INCLUDE +#define HGL_GRAPH_TEXT_LAYOUT_INCLUDE + +#include +#include +#include +namespace hgl +{ + namespace graph + { + + class TextRenderable:public vulkan::Renderable + { + };//class TextRenderable:public vulkan::Renderable + + /** + * 文本排版处理 + */ + class TextLayout + { + FontSource *source; + + public: + + TextLayout(FontSource *fs):source(fs){} + virtual ~TextLayout()=default; + + + };//class TextLayout + }//namespace graph +}//namespace hgl +#endif//HGL_GRAPH_TEXT_LAYOUT_INCLUDE diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 9664eb96..2f72361d 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -42,6 +42,11 @@ SET(SCENE_GRAPH_SOURCE RenderList.cpp #SceneFile.cpp ) +SET(RENDERABLE_FILES ${ROOT_INCLUDE_PATH}/hgl/graph/RenderableCreater.h + RenderableCreater.cpp) + +SOURCE_GROUP("Renderable" FILES ${RENDERABLE_FILES}) + file(GLOB FONT_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/font/*.*) SET(FONT_SOURCE font/Font.cpp @@ -75,5 +80,7 @@ add_cm_library(ULRE.SceneGraph "ULRE" ${SCENE_GRAPH_HEADER} ${SG_VERTEX_SOURCE} + ${RENDERABLE_FILES} + ${FONT_HEADER} ${FONT_SOURCE}) diff --git a/src/SceneGraph/RenderableCreater.cpp b/src/SceneGraph/RenderableCreater.cpp new file mode 100644 index 00000000..5c39b1a9 --- /dev/null +++ b/src/SceneGraph/RenderableCreater.cpp @@ -0,0 +1,83 @@ +#include +#include + +namespace hgl +{ + namespace graph + { + RenderableCreater::RenderableCreater(SceneDB *sdb,vulkan::Material *m) + { + db =sdb; + mtl =m; + vsm =mtl->GetVertexShaderModule(); + + render_obj =nullptr; + vertices_number =0; + vb_vertex =nullptr; + ibo =nullptr; + } + + RenderableCreater::~RenderableCreater() + { + SAFE_CLEAR(render_obj); + } + + bool RenderableCreater::Init(const uint32 count) + { + if(count<=0)return(false); + + vertices_number=count; + + render_obj=mtl->CreateRenderable(vertices_number); + + return(true); + } + + VertexBufferCreater *RenderableCreater::Bind(const AnsiString &name) + { + if(!vsm)return(false); + + VertexBufferCreater *vb; + + if(vb_map.Get(name,vb)) + return vb; + + const vulkan::ShaderStage *ss=vsm->GetStageInput(name); + + if(!ss) + return(nullptr); + + vb=CreateVB(ss->base_type,ss->component,vertices_number); + + vb_map.Add(name,vb); + + return vb; + } + + uint16 *RenderableCreater::CreateIBO16(uint count,const uint16 *data) + { + if(!ibo)return(nullptr); + + ibo=db->CreateIBO16(count,data); + return (uint16 *)ibo->Map(); + } + + uint32 *RenderableCreater::CreateIBO32(uint count,const uint32 *data) + { + if(!ibo)return(nullptr); + + ibo=db->CreateIBO32(count,data); + return (uint32 *)ibo->Map(); + } + + vulkan::Renderable *RenderableCreater::Finish() + { + const uint si_count=vsm->GetStageInputCount(); + + if(vb_map.GetCount()!=si_count) + return(nullptr); + + + } + }//namespace graph +}//namespace hgl