diff --git a/example/Vulkan/indices_rect.cpp b/example/Vulkan/indices_rect.cpp index 058c106c..db10ba78 100644 --- a/example/Vulkan/indices_rect.cpp +++ b/example/Vulkan/indices_rect.cpp @@ -78,7 +78,7 @@ private: return(true); } - vulkan::Buffer *CreateUBO(const UTF8String &name,const VkDeviceSize size,void *data) + vulkan::Buffer *CreateUBO(const AnsiString &name,const VkDeviceSize size,void *data) { vulkan::Buffer *ubo=device->CreateUBO(size,data); diff --git a/inc/hgl/graph/RenderableCreater.h b/inc/hgl/graph/RenderableCreater.h index 26350a51..b9e52243 100644 --- a/inc/hgl/graph/RenderableCreater.h +++ b/inc/hgl/graph/RenderableCreater.h @@ -7,6 +7,9 @@ namespace hgl { namespace graph { + /** + * 预定义一些顶点属性名称,可用可不用。但一般默认shader会使用这些名称 + */ namespace VertexAttribName { #define VAN_DEFINE(name) constexpr char name[]=#name; @@ -16,11 +19,24 @@ namespace hgl VAN_DEFINE(Tangent) VAN_DEFINE(Bitangent) VAN_DEFINE(TexCoord) + VAN_DEFINE(Metallic) + VAN_DEFINE(Specular) + VAN_DEFINE(Roughness) + VAN_DEFINE(Emission) #undef VAN_DEFINE }//namespace VertexAttribName #define VAN VertexAttribName + struct ShaderStageBind + { + AnsiString name; + uint binding; + VABCreater *vabc; + };//struct ShaderStageBind + + using VABCreaterMaps=MapObject; + /** * 可渲染对象创建器 */ @@ -35,35 +51,19 @@ namespace hgl protected: - vulkan::Renderable * render_obj; - uint32 vertices_number; - VertexAttribBufferCreater * vabc_vertex; - vulkan::IndexBuffer * ibo; - - MapObject vabc_maps; + vulkan::IndexBuffer * ibo; + VABCreaterMaps vabc_maps; public: RenderableCreater(SceneDB *sdb,vulkan::Material *m); - virtual ~RenderableCreater(); + virtual ~RenderableCreater()=default; virtual bool Init(const uint32 count); - virtual VertexAttribBufferCreater * CreateVAB(const AnsiString &name); - - #define PreDefineCreateVAB(name) \ - virtual VertexAttribBufferCreater * Create##name##Buffer(){return CreateVAB(VAN::name));} - - PreDefineCreateVAB(Vertex) - PreDefineCreateVAB(Normal) - PreDefineCreateVAB(Color) - PreDefineCreateVAB(Tangent) - PreDefineCreateVAB(Bitangent) - PreDefineCreateVAB(TexCoord) - - #undef PreDefineCreateVAB + virtual VABCreater * CreateVAB(const AnsiString &name); uint16 * CreateIBO16(uint count,const uint16 *data=nullptr); uint32 * CreateIBO32(uint count,const uint32 *data=nullptr); diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 8e50e28a..231b8cac 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -80,7 +80,7 @@ add_cm_library(ULRE.SceneGraph "ULRE" ${SCENE_GRAPH_HEADER} ${SG_VERTEX_SOURCE} - ${RENDERABLE_FILES} + #${RENDERABLE_FILES} ${FONT_HEADER} ${FONT_SOURCE}) diff --git a/src/SceneGraph/RenderableCreater.cpp b/src/SceneGraph/RenderableCreater.cpp index 2e5c21dd..87b87f30 100644 --- a/src/SceneGraph/RenderableCreater.cpp +++ b/src/SceneGraph/RenderableCreater.cpp @@ -11,25 +11,17 @@ namespace hgl mtl =m; vsm =mtl->GetVertexShaderModule(); - render_obj =nullptr; vertices_number =0; vabc_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); } @@ -77,7 +69,13 @@ namespace hgl if(vabc_maps.GetCount()!=si_count) return(nullptr); + vulkan::Renderable *render_obj=mtl->CreateRenderable(vertices_number); + const auto *sp=vabc_maps.GetDataList(); + for(uint i=0;i