comments few codes and then start next step.
This commit is contained in:
parent
9661336325
commit
6e8932fc2f
2
CMCore
2
CMCore
@ -1 +1 @@
|
||||
Subproject commit d644ec4ab01e6fcede9ed3af37ff0090a19cf857
|
||||
Subproject commit 6a21b387f52699840fc6245291bcc93a3a797a6a
|
@ -1,5 +1,5 @@
|
||||
// third_triangle
|
||||
// 该范例主要演示使用场景树系统绘制三角形
|
||||
// 该范例主要演示使用场景树系统绘制多个三角形,并利用RenderList进行排序以及自动合并进行Instance渲染
|
||||
|
||||
#include"VulkanAppFramework.h"
|
||||
#include<hgl/math/Math.h>
|
||||
|
@ -35,7 +35,7 @@ private:
|
||||
};
|
||||
|
||||
MaterialInstanceSets mi_set;
|
||||
List<RenderItem> ri_list;
|
||||
DataArray<RenderItem> ri_array;
|
||||
uint ri_count;
|
||||
|
||||
void Stat();
|
||||
|
@ -50,8 +50,6 @@ protected:
|
||||
|
||||
VIL *vil;
|
||||
|
||||
|
||||
|
||||
public:
|
||||
|
||||
Material * GetMaterial () {return material;}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
//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_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());
|
||||
|
||||
for(uint i=0;i<count;i++)
|
||||
{
|
||||
*tp=mi_set.Find(render_node->ri->GetMaterialInstance());
|
||||
++tp;
|
||||
++render_node;
|
||||
}
|
||||
mi_id->Unmap();
|
||||
}
|
||||
|
||||
//MaterialInstance Data
|
||||
{
|
||||
//const uint count=mi_set.GetCount();
|
||||
|
||||
//uint8 *tp=(uint8 *)(mi_data_buffer->Map());
|
||||
//const MaterialInstance **mi=mi_set.GetData();
|
||||
|
||||
//for(uint i=0;i<count;i++)
|
||||
//void WriteMaterialInstance(RenderNode *render_node,const uint count,const MaterialInstanceSets &mi_set)
|
||||
//{
|
||||
// memcpy(tp,(*mi)->GetData(),mi_size);
|
||||
// //MaterialInstance ID
|
||||
// {
|
||||
// uint8 *tp=(uint8 *)(mi_id->Map());
|
||||
|
||||
// ++mi;
|
||||
// tp+=mi_size;
|
||||
// for(uint i=0;i<count;i++)
|
||||
// {
|
||||
// *tp=mi_set.Find(render_node->ri->GetMaterialInstance());
|
||||
// ++tp;
|
||||
// ++render_node;
|
||||
// }
|
||||
// mi_id->Unmap();
|
||||
// }
|
||||
|
||||
// //MaterialInstance Data
|
||||
// {
|
||||
// //const uint count=mi_set.GetCount();
|
||||
|
||||
// //uint8 *tp=(uint8 *)(mi_data_buffer->Map());
|
||||
// //const MaterialInstance **mi=mi_set.GetData();
|
||||
|
||||
// //for(uint i=0;i<count;i++)
|
||||
// //{
|
||||
// // memcpy(tp,(*mi)->GetData(),mi_size);
|
||||
//
|
||||
// // ++mi;
|
||||
// // tp+=mi_size;
|
||||
// //}
|
||||
|
||||
// //mi_data_buffer->Unmap();
|
||||
// }
|
||||
//}
|
||||
|
||||
//mi_data_buffer->Unmap();
|
||||
}
|
||||
}
|
||||
};//struct RenderExtraBuffer
|
||||
VK_NAMESPACE_END
|
||||
|
Loading…
x
Reference in New Issue
Block a user