diff Renderer/Engine/SceneGraphRoot.cc @ 1002:c79651141045

many changes.
author koba <koba@cr.ie.u-ryukyu.ac.jp>
date Sun, 24 Oct 2010 19:00:47 +0900
parents 9a53faae88d8
children 295b3c79fb44
line wrap: on
line diff
--- a/Renderer/Engine/SceneGraphRoot.cc	Mon Oct 11 19:42:28 2010 +0900
+++ b/Renderer/Engine/SceneGraphRoot.cc	Sun Oct 24 19:00:47 2010 +0900
@@ -8,6 +8,9 @@
 #include "texture.h"
 #include "Application.h"
 
+//取りあえず動かす用 本来はA pplication 側で定義した post_func で値の更新するべき
+#include "../../../task_dandy/dandy.h"
+
 static int cnt = 0;
 static const int SGLIST_LENGTH = 138;
 static int sg_src_size = SGLIST_LENGTH ;
@@ -699,28 +702,57 @@
 
 void
 SceneGraphRoot::set_game_task(int id, void *property, int size, PostFunction post_func)
-{ 
+{
+  game_task = game_task_array->next_task_array(id, game_task);
+
+  game_task->set_inData(0, property, size);
+  game_task->set_outData(0, property, size);
+  
+  /*
   HTask *task = sgroot->tmanager->create_task(id);
   task->set_cpu(SPE_ANY);
-  task->add_inData(property, size);
-  task->add_outData(property, size);
-  task->add_param((memaddr)1);
+  task->set_inData(0, property, size);
+  task->set_outData(0, property, size);
   task->set_post(post_func, (void*)property, 0);
   wait_game_task->wait_for(task);
   task->spawn();
+  */
 }
 
 void
 SceneGraphRoot::set_game_task(int id, void *property, void *pad, int size, PostFunction post_func)
 {
+  game_task = game_task_array->next_task_array(id, game_task);
+
+  game_task->set_inData(0, property, size);
+  game_task->set_inData(1, pad, sizeof(Pad));
+  game_task->set_outData(0, property, size);
+
+  /*
   HTask *task = sgroot->tmanager->create_task(id);
   task->set_cpu(SPE_ANY);
-  task->add_inData(property, size);
-  task->add_inData(pad, sizeof(Pad));
-  task->add_outData(property, size);
+  task->set_inData(0, property, size);
+  task->set_inData(0, pad, sizeof(Pad));
+  task->set_outData(0, property, size);
   task->set_post(post_func, (void*)property, 0);
   wait_game_task->wait_for(task);
   task->spawn();
+  */
+}
+
+void
+SceneGraphRoot::task_array_init(int id, int task_num, int param, int inData_num, int outData_num)
+{
+  game_task_array = tmanager->create_task_array(id, task_num, param, inData_num, outData_num);
+  game_task = 0;
+}
+
+void
+SceneGraphRoot::task_array_finish()
+{
+  game_task_array->spawn_task_array(game_task->next());
+  game_task_array->set_cpu(SPE_ANY);
+  game_task_array->spawn();
 }
 
 void
@@ -730,8 +762,11 @@
   void *e  = node->propertyptr;
   int move = node->move_id;
   PostFunction post_func = node->post_func;
+  ObjPropertyPtr property = (ObjPropertyPtr)node->propertyptr;
+  property->root = node;
 
   SceneGraphRoot *sgroottmp = (SceneGraphRoot*)sgroot_;
+
   sgroottmp->set_game_task(move, (void*)e, size, post_func);
 }
 
@@ -742,6 +777,8 @@
   void *e  = node->propertyptr;
   int move = node->move_id;
   PostFunction post_func = node->post_func;
+  ObjPropertyPtr property = (ObjPropertyPtr)node->propertyptr;
+  property->root = node;
 
   SceneGraphRoot *sgroottmp = (SceneGraphRoot*)sgroot_;
   void *pad = (void*)sgroottmp->getController();
@@ -750,7 +787,7 @@
 }
 
 void
-SceneGraphRoot::set_move_task(SceneGraphPtr node, int move, void *property, int size, 
+SceneGraphRoot::set_move_task(SceneGraphPtr node, int move, void *property, int size,
 			      PostFunction post_func)
 {
     node->move = main_task_move;