diff --git a/CMPlatform b/CMPlatform index 9b1975a8..984d9698 160000 --- a/CMPlatform +++ b/CMPlatform @@ -1 +1 @@ -Subproject commit 9b1975a8a5c74dfc5189b4d7f23d155b6e15cca8 +Subproject commit 984d9698ef873a08f0c99579e8a9b4bf15e5ce5f diff --git a/example/Vulkan/LoadScene.cpp b/example/Vulkan/LoadScene.cpp index 70660b2f..7a3b1ca4 100644 --- a/example/Vulkan/LoadScene.cpp +++ b/example/Vulkan/LoadScene.cpp @@ -167,6 +167,64 @@ namespace hgl return(true); } + SceneNodeData *LoadNode(const int level) + { + #ifdef _DEBUG + AutoDeleteArray spaces=new char[level+1]; + + memset(spaces,' ',level); + spaces[level]=0; + #endif//_DEBUG + + SceneNodeData *node=new SceneNodeData; + + memcpy(&(node->local_matrix),sp,sizeof(Matrix4f)); + sp+=sizeof(Matrix4f); + + { + const uint8 name_len=*sp++; + + node->name.SetString((char *)sp,name_len); + sp+=name_len; + + LOG_INFO(spaces+UTF8String("Node name: ")+node->name); + } + + { + node->mesh_count=*(uint32 *)sp; + sp+=sizeof(uint32); + + if(node->mesh_count>0) + { + node->mesh_index=(const uint32 *)sp; + + #ifdef _DEBUG + const uint32 *mi=node->mesh_index; + + for(uint i=0;imesh_count;i++) + LOG_INFO(spaces+UTF8String(" ")+UTF8String::valueOf(i)+UTF8String(" : ")+md->mesh_name[*mi++]); + #endif//_DEBUG + + sp+=node->mesh_count*sizeof(uint32); + } + } + + { + const uint32 child_count=*(uint32 *)sp; + sp+=sizeof(uint32); + + if(child_count>0) + { + LOG_INFO(spaces+UTF8String("Sub-node Count: ")+UTF8String::valueOf(child_count)); + + for(uint i=0;isub_nodes.Add(LoadNode(level+1)); + } + } + + return node; + } + public: LoadModelData(uint8 *source,const uint8 *s) @@ -204,6 +262,12 @@ namespace hgl md->mesh_list.Add(mesh); } + LOG_INFO(OS_TEXT("Load Scene Tree")); + + Load(md->bounding_box); + + md->root_node=LoadNode(1); + return(true); } };//struct LoadModelData diff --git a/inc/hgl/graph/data/SceneNodeData.h b/inc/hgl/graph/data/SceneNodeData.h index c811456f..d9394e67 100644 --- a/inc/hgl/graph/data/SceneNodeData.h +++ b/inc/hgl/graph/data/SceneNodeData.h @@ -14,7 +14,8 @@ namespace hgl Matrix4f local_matrix; - List mesh_index; + uint32 mesh_count; + const uint32 *mesh_index; ObjectList sub_nodes; };//struct SceneNodeData