diff Renderer/Test/create_task.cc @ 760:24a37fe8419a

first of all commit, not work Rendering/Test/create_task
author hiroki
date Thu, 04 Feb 2010 14:46:09 +0900
parents bb47827c04c1
children 87390c99c900
line wrap: on
line diff
--- a/Renderer/Test/create_task.cc	Mon Feb 01 17:08:36 2010 +0900
+++ b/Renderer/Test/create_task.cc	Thu Feb 04 14:46:09 2010 +0900
@@ -10,21 +10,29 @@
 Property *property, *update_property;
 
 // prototype
+static void collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, SceneGraphPtr tree);
 static void move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h);
-static void collision(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h, SceneGraphPtr tree);
 static void createSceneGraphFromProperty(SchedTask *s, void *sgroot, void *arg1);
+//static void createSceneGraphFromProperty(void *sgroot, void *property_, void *update_property_);
+static void set_property(Property *p, SceneGraphPtr sg);
+static void regist_task(SceneGraphRoot *sgroot);
 
 static void
 move(SceneGraphPtr node, void *sgroot_, int screen_w, int screen_h)
 {
     SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_;
-    TaskManager *manager = sgroot->tmanager;
-    HTaskPtr property_task = manager->create_task(PropertyTask);
+    //TaskManager *manager = sgroot->tmanager;
+    //HTaskPtr property_task = manager->create_task(PropertyTask);
+    HTaskPtr property_task = sgroot->move_exec_task;
 
     property_task->add_inData(property, sizeof(Property));
     property_task->add_outData(update_property, sizeof(Property));
+
+    //property_task->add_inData((Property *)node->property, sizeof(Property));
+    //property_task->add_outData((Property *)node->update_property, sizeof(Property));
+    //property_task->set_param(0, (memaddr)sgroot->move_finish_flag);
     property_task->set_cpu(SPE_ANY);
-
+    
     property_task->set_post(createSceneGraphFromProperty, (void *)sgroot, 0);
     property_task->spawn();
 }
@@ -35,6 +43,7 @@
 {
 }
 
+#if 1
 static void
 createSceneGraphFromProperty(SchedTask *s, void *sgroot_, void *arg1)
 {
@@ -52,8 +61,44 @@
     Property *tmp = property;
     property = update_property;
     update_property = tmp;
-    
+
+    sgroot->move_finish();
 }
+#else
+static void
+createSceneGraphFromProperty(void *sgroot_, void *property_, void *update_property_)
+{
+    SceneGraphPtr node;
+    SceneGraphRoot *sgroot = (SceneGraphRoot *)sgroot_;
+    Property *property = (Property *)property_;
+    Property *update_property = (Property *)update_property_;
+
+    node = sgroot->createSceneGraph(update_property->name);
+    //node = sgroot->createSceneGraph("Ball");
+    //node->set_move_collision(move, collision);
+    node->set_move_collision(move, collision, createSceneGraphFromProperty);
+    node->xyz[0] = update_property->xyz[0];
+    node->xyz[1] = update_property->xyz[1];
+    node->xyz[2] = update_property->xyz[2];
+    sgroot->setSceneData(node);
+
+    Property *tmp = property;
+    property = update_property;
+    update_property = tmp;    
+}
+#endif
+
+
+static void
+regist_task(SceneGraphRoot *sgroot)
+{
+    TaskManager *manager = sgroot->tmanager;
+    HTaskPtr property_task = manager->create_task(PropertyTask);
+    sgroot->move_exec_task = property_task;
+}
+
+
+
 
 static void
 set_property(Property *p, SceneGraphPtr sg)
@@ -70,9 +115,14 @@
     // SgChange を使うための2行
     SgChange *sgroot = new SgChange(viewer);
     sgroot->run_init();
+    sgroot->sgroot_A->appTaskRegist(regist_task);
 
     property        = (Property *)sgroot->manager->allocate(sizeof(Property));
     update_property = (Property *)sgroot->manager->allocate(sizeof(Property));
+    /*
+    Property *property        = (Property *)sgroot->manager->allocate(sizeof(Property));
+    Property *update_property = (Property *)sgroot->manager->allocate(sizeof(Property));
+    */
 
     SceneGraphPtr ball;
 
@@ -80,11 +130,16 @@
 
     ball = sgroot->createSceneGraph("Ball");
     ball->set_move_collision(move, collision);
+    //ball->set_move_collision(move, collision, createSceneGraphFromProperty);
 
     ball->xyz[0] = screen_w/2;
     ball->xyz[1] = screen_h/2;
     ball->xyz[2] = 30.0f;
 
+    //SceneGraph に property を持たせておく
+    ball->property = (void *)property;
+    ball->update_property = (void *)update_property;
+
     set_property(property, ball);
     
     sgroot->setSceneData(ball);