diff --git a/CMCore b/CMCore index d644ec4a..6a21b387 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit d644ec4ab01e6fcede9ed3af37ff0090a19cf857 +Subproject commit 6a21b387f52699840fc6245291bcc93a3a797a6a diff --git a/example/Vulkan/fourth_triangle.cpp b/example/Vulkan/fourth_triangle.cpp index c64966a8..251bd4da 100644 --- a/example/Vulkan/fourth_triangle.cpp +++ b/example/Vulkan/fourth_triangle.cpp @@ -67,7 +67,7 @@ private: material_instance[i]->SetFloat4(0,color_data[i]); }*/ } - + // pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d")); // pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,Prim::Triangles); //等同上一行,为Framework重载,默认使用swapchain的render target diff --git a/example/Vulkan/third_triangle.cpp b/example/Vulkan/third_triangle.cpp index 0ac27494..b3d8e516 100644 --- a/example/Vulkan/third_triangle.cpp +++ b/example/Vulkan/third_triangle.cpp @@ -1,5 +1,5 @@ // third_triangle -// 该范例主要演示使用场景树系统绘制三角形 +// 该范例主要演示使用场景树系统绘制多个三角形,并利用RenderList进行排序以及自动合并进行Instance渲染 #include"VulkanAppFramework.h" #include diff --git a/inc/hgl/graph/MaterialRenderList.h b/inc/hgl/graph/MaterialRenderList.h index 3a9ca3cd..e4ce7bf3 100644 --- a/inc/hgl/graph/MaterialRenderList.h +++ b/inc/hgl/graph/MaterialRenderList.h @@ -35,7 +35,7 @@ private: }; MaterialInstanceSets mi_set; - List ri_list; + DataArray ri_array; uint ri_count; void Stat(); diff --git a/inc/hgl/graph/VKMaterialInstance.h b/inc/hgl/graph/VKMaterialInstance.h index ccf1c88f..46a8924c 100644 --- a/inc/hgl/graph/VKMaterialInstance.h +++ b/inc/hgl/graph/VKMaterialInstance.h @@ -50,8 +50,6 @@ protected: VIL *vil; - - public: Material * GetMaterial () {return material;} diff --git a/src/SceneGraph/MaterialRenderList.cpp b/src/SceneGraph/MaterialRenderList.cpp index bf8589fb..937dfad4 100644 --- a/src/SceneGraph/MaterialRenderList.cpp +++ b/src/SceneGraph/MaterialRenderList.cpp @@ -128,12 +128,12 @@ void MaterialRenderList::Stat() const uint count=rn_list.GetCount(); RenderNode *rn=rn_list.GetData(); - ri_list.Clear(); - ri_list.PreAlloc(count); + ri_array.Clear(); + ri_array.Alloc(count); mi_set.Clear(); - RenderItem *ri=ri_list.GetData(); + RenderItem *ri=ri_array.GetData(); ri_count=1; @@ -324,7 +324,7 @@ void MaterialRenderList::Render(RenderCmdBuffer *rcb) cmd_buf=rcb; - RenderItem *ri=ri_list.GetData(); + RenderItem *ri=ri_array.GetData(); last_pipeline =nullptr; last_mi =nullptr; diff --git a/src/SceneGraph/RenderExtraBuffer.h b/src/SceneGraph/RenderExtraBuffer.h index 3e01e247..04e87793 100644 --- a/src/SceneGraph/RenderExtraBuffer.h +++ b/src/SceneGraph/RenderExtraBuffer.h @@ -27,13 +27,13 @@ VK_NAMESPACE_BEGIN struct RenderExtraBuffer { uint node_count; ///<渲染节点数量 - uint mi_count; ///<材质实例数量 +// uint mi_count; ///<材质实例数量 - uint mi_size; ///<单个材质实例数量长度 - DeviceBuffer *mi_data_buffer; ///<材质实例数据UBO/SSBO + //uint mi_size; ///<单个材质实例数量长度 + //DeviceBuffer *mi_data_buffer; ///<材质实例数据UBO/SSBO - VBO *mi_id; - VkBuffer mi_id_buffer; + //VBO *mi_id; + //VkBuffer mi_id_buffer; // VBO *bone_id,*bone_weight; // VkBuffer bone_id_buffer,bone_weight_buffer; @@ -62,18 +62,18 @@ public: node_count=0; } - void ClearMI() - { - SAFE_CLEAR(mi_id) - SAFE_CLEAR(mi_data_buffer); - mi_count=0; - mi_size=0; - } + //void ClearMI() + //{ + // SAFE_CLEAR(mi_id) + // SAFE_CLEAR(mi_data_buffer); + // mi_count=0; + // mi_size=0; + //} void Clear() { ClearNode(); - ClearMI(); +// ClearMI(); // SAFE_CLEAR(bone_id) // SAFE_CLEAR(bone_weight) @@ -91,19 +91,19 @@ public: } } - void MIAlloc(GPUDevice *dev,const uint c,const uint mis) - { - ClearMI(); - if(c<=0||mi_size<=0)return; - - mi_count=power_to_2(c); - mi_size=mis; + //void MIAlloc(GPUDevice *dev,const uint c,const uint mis) + //{ + // ClearMI(); + // if(c<=0||mi_size<=0)return; + // + // mi_count=power_to_2(c); + // mi_size=mis; - mi_id=dev->CreateVBO(VF_V1U8,mi_count); - mi_id_buffer=mi_id->GetBuffer(); + // mi_id=dev->CreateVBO(VF_V1U8,mi_count); + // mi_id_buffer=mi_id->GetBuffer(); - mi_data_buffer=dev->CreateUBO(mi_count*mi_size); - } + // mi_data_buffer=dev->CreateUBO(mi_count*mi_size); + //} void WriteLocalToWorld(RenderNode *render_node,const uint count) { @@ -127,38 +127,38 @@ public: } } - void WriteMaterialInstance(RenderNode *render_node,const uint count,const MaterialInstanceSets &mi_set) - { - //MaterialInstance ID - { - uint8 *tp=(uint8 *)(mi_id->Map()); + //void WriteMaterialInstance(RenderNode *render_node,const uint count,const MaterialInstanceSets &mi_set) + //{ + // //MaterialInstance ID + // { + // uint8 *tp=(uint8 *)(mi_id->Map()); - for(uint i=0;iri->GetMaterialInstance()); - ++tp; - ++render_node; - } - mi_id->Unmap(); - } + // for(uint i=0;iri->GetMaterialInstance()); + // ++tp; + // ++render_node; + // } + // mi_id->Unmap(); + // } - //MaterialInstance Data - { - //const uint count=mi_set.GetCount(); + // //MaterialInstance Data + // { + // //const uint count=mi_set.GetCount(); - //uint8 *tp=(uint8 *)(mi_data_buffer->Map()); - //const MaterialInstance **mi=mi_set.GetData(); + // //uint8 *tp=(uint8 *)(mi_data_buffer->Map()); + // //const MaterialInstance **mi=mi_set.GetData(); - //for(uint i=0;iGetData(),mi_size); - - // ++mi; - // tp+=mi_size; - //} + // //for(uint i=0;iGetData(),mi_size); + // + // // ++mi; + // // tp+=mi_size; + // //} - //mi_data_buffer->Unmap(); - } - } + // //mi_data_buffer->Unmap(); + // } + //} };//struct RenderExtraBuffer VK_NAMESPACE_END