Mercurial > hg > Members > kono > Cerium
diff Renderer/Engine/SceneGraphRoot.cc @ 580:da82a47ece92
add all object in file in dynamic_create
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 24 Oct 2009 16:32:29 +0900 |
parents | cc989924f469 |
children | ea03c178fc30 |
line wrap: on
line diff
--- a/Renderer/Engine/SceneGraphRoot.cc Sat Oct 24 16:11:08 2009 +0900 +++ b/Renderer/Engine/SceneGraphRoot.cc Sat Oct 24 16:32:29 2009 +0900 @@ -84,8 +84,8 @@ sg_src_size *= 2; sg_src = (SceneGraphPtr*)realloc(sg_src, sg_src_size); } - sg->id = ++sg_src_id; - sg_src[sg->id] = sg; + sg->sgid = ++sg_src_id; + sg_src[sg->sgid] = sg; } void @@ -130,12 +130,39 @@ /* ポリゴン(SceneGraph)生成 */ tmp = new SceneGraph(manager, cur); - registSceneGraph(tmp); } - xmlFreeDoc(doc); +} +void +SceneGraphRoot::createFromXMLmemory(TaskManager *manager, SceneGraph *node, char *data, int len) +{ + xmlDocPtr doc; + xmlNodePtr cur; + + // size は取れるはず、テスト用に mmap したデータを使う + /* パース DOM生成 */ + + doc = xmlParseMemory(data, len); + cur = xmlDocGetRootElement(doc); + + /* ?? */ + xmlStrcmp(cur->name,(xmlChar*)"OBJECT-3D"); + + /* XMLのノードを一つずつ解析 */ + for (cur=cur->children; cur; cur=cur->next) { + /* 扱うのはsurfaceオンリー */ + if (xmlStrcmp(cur->name,(xmlChar*)"surface") != 0) { + continue; + } + /* ポリゴン(SceneGraph)生成 */ + SceneGraphPtr original = new SceneGraph(manager, cur); + registSceneGraph(original); + SceneGraphPtr clone = createSceneGraph(original->sgid); + node->addChild(clone); + } + xmlFreeDoc(doc); } SceneGraphPtr @@ -160,36 +187,6 @@ } -void -SceneGraphRoot::createFromXMLmemory(TaskManager *manager, char *data, int len) -{ - xmlDocPtr doc; - xmlNodePtr cur; - - // size は取れるはず、テスト用に mmap したデータを使う - /* パース DOM生成 */ - - doc = xmlParseMemory(data, len); - cur = xmlDocGetRootElement(doc); - - /* ?? */ - xmlStrcmp(cur->name,(xmlChar*)"OBJECT-3D"); - - /* XMLのノードを一つずつ解析 */ - for (cur=cur->children; cur; cur=cur->next) { - /* 扱うのはsurfaceオンリー */ - if (xmlStrcmp(cur->name,(xmlChar*)"surface") != 0) { - continue; - } - - /* ポリゴン(SceneGraph)生成 */ - SceneGraphPtr tmp = new SceneGraph(manager, cur); - - registSceneGraph(tmp); - } - - xmlFreeDoc(doc); -} SceneGraphPtr @@ -228,7 +225,7 @@ SceneGraphRoot::getLast() { if (sg_src_id>=0) - return sg_src[sg_src_id]->id; + return sg_src[sg_src_id]->sgid; return -1; }