diff Renderer/Test/dynamic_create.cc @ 671:f42b303044f7

fix several Renderer/Test with (void*)sgroot.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 05 Dec 2009 17:26:58 +0900
parents d0b8860c17f8
children 4dc02d3e98bb
line wrap: on
line diff
--- a/Renderer/Test/dynamic_create.cc	Thu Dec 03 09:02:40 2009 +0900
+++ b/Renderer/Test/dynamic_create.cc	Sat Dec 05 17:26:58 2009 +0900
@@ -37,6 +37,7 @@
     int sid;
     int read_id;
     SceneGraphPtr node;
+    SceneGraphRoot *sgroot;
     TaskManager *manager;
     client_t *clist;
 } callback_arg;
@@ -105,13 +106,13 @@
 
 
 static void
-earth_move(SceneGraphPtr node, int screen_w, int screen_h)
+earth_move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h)
 {
     // psx_sync_n();  in viewer::MainLoop
 }
 
 SceneGraphPtr
-create_sg(TaskManager *manager, SceneGraphPtr parent, unsigned char *data,
+create_sg(TaskManager *manager, SceneGraphRoot *sgroot, SceneGraphPtr parent, unsigned char *data,
 	  int len, int serial_id)
 {
     SceneGraphPtr child = sgroot->createSceneGraph();
@@ -119,8 +120,8 @@
     // 読み込んだオブジェクトは、すべて、child の child になる。
     sgroot->createFromXMLmemory(sgroot->tmanager, child, (char *)data, len);
     child->set_move_collision(moon_move, moon_collision);
-	child->id = serial_id;
-	child->seq = psx_wait_rd(sgroot->tid, serial_id * 10 + 1);
+    child->id = serial_id;
+    child->seq = psx_wait_rd(sgroot->tid, serial_id * 10 + 1);
 
     return child;
 }
@@ -134,7 +135,7 @@
     SceneGraphPtr sgp;
     // ここで create
     //	fwrite(xml_data, 1, 10, stdout);
-    sgp = create_sg(carg->manager, carg->node, xml_data, xml_len, carg->sid);
+    sgp = create_sg(carg->manager, carg->sgroot, carg->node, xml_data, xml_len, carg->sid);
     printf("%s size %d loaded\n", sgp->children->name, xml_len);
     client_list_update(carg->manager, carg->clist, carg->sid, sgp);
     free(arg);
@@ -166,20 +167,23 @@
     /* dataは'\0'で終わっている事を期待     (writerで保証する)  */
     //printf("get data[%d]: `%s'\n", len, data);
     free(taple);
-    
+   
+    // arg は使い回すらしい。
+ 
     psx_callback_in(carg->tid, carg->read_id, callbacker, arg);
 }
 
 static char const *linda = "localhost";
 
-void
-linda_init(TaskManager *manager, client_t *clist, SceneGraphPtr node)
+static void
+linda_init(TaskManager *manager, SceneGraphRoot *sgroot, client_t *clist, SceneGraphPtr node)
 {
     init_linda();
     callback_arg *carg = (callback_arg *)manager->allocate(sizeof(callback_arg));
 
     carg->tid = open_linda_java(linda, PORT);
-	sgroot->tid = carg->tid;
+    carg->sgroot = sgroot;
+    carg->sgroot->tid = carg->tid;
     carg->read_id = SERIAL_REGIST_TUPLE_NO;    
     carg->node = node;
     carg->manager = manager;
@@ -201,7 +205,7 @@
     parent->set_move_collision(earth_move, earth_collision);
 //    parent->xyz[0] += 300;
 //    parent->xyz[1] += 300;
-    linda_init(sgroot->manager, clist,  parent);
+    linda_init(sgroot->manager, sgroot->sgroot, clist,  parent);
     
     // SceneGraphRoot に、使用する SceneGraph を設定する
     // このとき、ユーザーが記述した SceneGraph の root を渡す。