comments few codes and then start next step.

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-09-05 10:28:03 +08:00
parent 9661336325
commit 6e8932fc2f
7 changed files with 60 additions and 62 deletions

2
CMCore

@ -1 +1 @@
Subproject commit d644ec4ab01e6fcede9ed3af37ff0090a19cf857 Subproject commit 6a21b387f52699840fc6245291bcc93a3a797a6a

View File

@ -67,7 +67,7 @@ private:
material_instance[i]->SetFloat4(0,color_data[i]); material_instance[i]->SetFloat4(0,color_data[i]);
}*/ }*/
} }
// pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d")); // 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 // pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,Prim::Triangles); //等同上一行为Framework重载默认使用swapchain的render target

View File

@ -1,5 +1,5 @@
// third_triangle // third_triangle
// 该范例主要演示使用场景树系统绘制三角形 // 该范例主要演示使用场景树系统绘制多个三角形并利用RenderList进行排序以及自动合并进行Instance渲染
#include"VulkanAppFramework.h" #include"VulkanAppFramework.h"
#include<hgl/math/Math.h> #include<hgl/math/Math.h>

View File

@ -35,7 +35,7 @@ private:
}; };
MaterialInstanceSets mi_set; MaterialInstanceSets mi_set;
List<RenderItem> ri_list; DataArray<RenderItem> ri_array;
uint ri_count; uint ri_count;
void Stat(); void Stat();

View File

@ -50,8 +50,6 @@ protected:
VIL *vil; VIL *vil;
public: public:
Material * GetMaterial () {return material;} Material * GetMaterial () {return material;}

View File

@ -128,12 +128,12 @@ void MaterialRenderList::Stat()
const uint count=rn_list.GetCount(); const uint count=rn_list.GetCount();
RenderNode *rn=rn_list.GetData(); RenderNode *rn=rn_list.GetData();
ri_list.Clear(); ri_array.Clear();
ri_list.PreAlloc(count); ri_array.Alloc(count);
mi_set.Clear(); mi_set.Clear();
RenderItem *ri=ri_list.GetData(); RenderItem *ri=ri_array.GetData();
ri_count=1; ri_count=1;
@ -324,7 +324,7 @@ void MaterialRenderList::Render(RenderCmdBuffer *rcb)
cmd_buf=rcb; cmd_buf=rcb;
RenderItem *ri=ri_list.GetData(); RenderItem *ri=ri_array.GetData();
last_pipeline =nullptr; last_pipeline =nullptr;
last_mi =nullptr; last_mi =nullptr;

View File

@ -27,13 +27,13 @@ VK_NAMESPACE_BEGIN
struct RenderExtraBuffer struct RenderExtraBuffer
{ {
uint node_count; ///<渲染节点数量 uint node_count; ///<渲染节点数量
uint mi_count; ///<材质实例数量 // uint mi_count; ///<材质实例数量
uint mi_size; ///<单个材质实例数量长度 //uint mi_size; ///<单个材质实例数量长度
DeviceBuffer *mi_data_buffer; ///<材质实例数据UBO/SSBO //DeviceBuffer *mi_data_buffer; ///<材质实例数据UBO/SSBO
VBO *mi_id; //VBO *mi_id;
VkBuffer mi_id_buffer; //VkBuffer mi_id_buffer;
// VBO *bone_id,*bone_weight; // VBO *bone_id,*bone_weight;
// VkBuffer bone_id_buffer,bone_weight_buffer; // VkBuffer bone_id_buffer,bone_weight_buffer;
@ -62,18 +62,18 @@ public:
node_count=0; node_count=0;
} }
void ClearMI() //void ClearMI()
{ //{
SAFE_CLEAR(mi_id) // SAFE_CLEAR(mi_id)
SAFE_CLEAR(mi_data_buffer); // SAFE_CLEAR(mi_data_buffer);
mi_count=0; // mi_count=0;
mi_size=0; // mi_size=0;
} //}
void Clear() void Clear()
{ {
ClearNode(); ClearNode();
ClearMI(); // ClearMI();
// SAFE_CLEAR(bone_id) // SAFE_CLEAR(bone_id)
// SAFE_CLEAR(bone_weight) // SAFE_CLEAR(bone_weight)
@ -91,19 +91,19 @@ public:
} }
} }
void MIAlloc(GPUDevice *dev,const uint c,const uint mis) //void MIAlloc(GPUDevice *dev,const uint c,const uint mis)
{ //{
ClearMI(); // ClearMI();
if(c<=0||mi_size<=0)return; // if(c<=0||mi_size<=0)return;
//
mi_count=power_to_2(c); // mi_count=power_to_2(c);
mi_size=mis; // mi_size=mis;
mi_id=dev->CreateVBO(VF_V1U8,mi_count); // mi_id=dev->CreateVBO(VF_V1U8,mi_count);
mi_id_buffer=mi_id->GetBuffer(); // 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) 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) //void WriteMaterialInstance(RenderNode *render_node,const uint count,const MaterialInstanceSets &mi_set)
{ //{
//MaterialInstance ID // //MaterialInstance ID
{ // {
uint8 *tp=(uint8 *)(mi_id->Map()); // uint8 *tp=(uint8 *)(mi_id->Map());
for(uint i=0;i<count;i++) // for(uint i=0;i<count;i++)
{ // {
*tp=mi_set.Find(render_node->ri->GetMaterialInstance()); // *tp=mi_set.Find(render_node->ri->GetMaterialInstance());
++tp; // ++tp;
++render_node; // ++render_node;
} // }
mi_id->Unmap(); // mi_id->Unmap();
} // }
//MaterialInstance Data // //MaterialInstance Data
{ // {
//const uint count=mi_set.GetCount(); // //const uint count=mi_set.GetCount();
//uint8 *tp=(uint8 *)(mi_data_buffer->Map()); // //uint8 *tp=(uint8 *)(mi_data_buffer->Map());
//const MaterialInstance **mi=mi_set.GetData(); // //const MaterialInstance **mi=mi_set.GetData();
//for(uint i=0;i<count;i++) // //for(uint i=0;i<count;i++)
//{ // //{
// memcpy(tp,(*mi)->GetData(),mi_size); // // memcpy(tp,(*mi)->GetData(),mi_size);
//
// ++mi; // // ++mi;
// tp+=mi_size; // // tp+=mi_size;
//} // //}
//mi_data_buffer->Unmap(); // //mi_data_buffer->Unmap();
} // }
} //}
};//struct RenderExtraBuffer };//struct RenderExtraBuffer
VK_NAMESPACE_END VK_NAMESPACE_END