changeset 715:0d8d2b7a3438

not work SgChange
author hiroki@localhost.localdomain
date Wed, 16 Dec 2009 16:29:31 +0900
parents fc0227b5cb5a
children 974672c4ea2a
files Renderer/Engine/SgChange.cc Renderer/Engine/SgChange.h
diffstat 2 files changed, 66 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/SgChange.cc	Tue Dec 08 19:44:20 2009 +0900
+++ b/Renderer/Engine/SgChange.cc	Wed Dec 16 16:29:31 2009 +0900
@@ -16,6 +16,8 @@
 
 static void post2runLoop(SchedTask *s, void *viewer, void *s1);
 static void post2runDraw(SchedTask *s, void *viewer, void *s1);
+static void post2runMove(SchedTask *s, void *viewer, void *s1);
+static void post2rendering(SchedTask *s, void *viewer, void *s1);
 
 /* measure for FPS (Frame Per Second) */
 int start_time;
@@ -92,8 +94,8 @@
     // ココ!
     sgroot_A = new SceneGraphRoot(this->width, this->height);
     sgroot_A->tmanager = manager;
-    //sgroot_B = new SceneGraphRoot(this->width, this->height);
-    //sgroot_B->tmanager = manager;
+    sgroot_B = new SceneGraphRoot(this->width, this->height);
+    sgroot_B->tmanager = manager;
 
     int size = 4;
     light_xyz[0] = 0.0f;
@@ -200,9 +202,8 @@
         spackList[i-1].reinit(i*split_screen_h);
     }
 
-    //exchange_sgroot();
-    sgroot_A->updateControllerState();
-    sgroot_A->allExecute(width, height);
+#if 0
+    exchange_sgroot();
     light_xyz_stock = sgroot_A->getLightVector();
 
     //printf("Sgroot = %x\n", sgroot_A);
@@ -211,6 +212,56 @@
     //task_next->spawn();
     
     rendering(task_next);
+#else
+    //exchange_sgroot();
+
+    sgroot_A->updateControllerState();
+    sgroot_A->allExecute(width, height);
+    light_xyz_stock = sgroot_A->getLightVector();
+
+    HTaskPtr loop_task  = manager->create_task(Dummy);
+    loop_task->set_post(post2runLoop, (void *)this, 0);
+
+    HTaskPtr draw_task  = manager->create_task(Dummy);
+    draw_task->set_post(post2rendering, (void *)this, 0);
+
+    HTaskPtr move_task  = manager->create_task(Dummy);
+    move_task->set_post(post2runMove, (void *)this, 0);
+
+    HTaskPtr dummy_task = manager->create_task(Dummy);
+
+    this->dummy_task = dummy_task;
+    loop_task->wait_for(dummy_task);
+    loop_task->wait_for(move_task);
+
+    move_task->spawn();
+    draw_task->spawn();
+    loop_task->spawn();
+#endif
+}
+
+static void 
+post2runMove(SchedTask *s, void *viewer_, void *arg)
+{
+    SgChange *viewer = (SgChange *)viewer_;
+    HTaskPtr task_next = viewer->manager->create_task(Dummy);
+    viewer->run_move(task_next);
+}
+
+void
+SgChange::run_move(HTaskPtr task_next)
+{
+    //sgroot_A->updateControllerState();
+    //sgroot_A->allExecute(width, height);
+}
+
+static void 
+post2rendering(SchedTask *s, void *viewer_, void *arg)
+{
+    SgChange *viewer = (SgChange *)viewer_;
+    HTaskPtr task_next = viewer->manager->create_task(Dummy);
+    viewer->run_draw(task_next);
+
 }
 
 void 
@@ -218,7 +269,7 @@
 {
     common_rendering(task_next);
     
-    task_next->set_post(post2runDraw, (void*)this, 0); // set_post(function(this->run_draw()), NULL)
+    task_next->set_post(post2runDraw, (void*)this, 0);
     task_next->spawn();
 }
 
@@ -263,6 +314,7 @@
     task_create_pp->spawn();
 }
 
+
 static void 
 post2runDraw(SchedTask *s, void *viewer_, void *arg)
 {
@@ -276,8 +328,14 @@
 {
     common_draw(task_next);
 
+#if 0
     task_next->set_post(post2runLoop, (void*)this, 0); // set_post(function(this->run_loop()), NULL)
     task_next->spawn();
+#else
+    this->dummy_task->wait_for(task_next);
+    task_next->spawn();
+    this->dummy_task->spawn();
+#endif
 
     frames++;
 }
--- a/Renderer/Engine/SgChange.h	Tue Dec 08 19:44:20 2009 +0900
+++ b/Renderer/Engine/SgChange.h	Wed Dec 16 16:29:31 2009 +0900
@@ -26,7 +26,7 @@
 
     TaskManager *manager;
     key_stat *keyPtr;
-    HTaskPtr draw_dummy;
+    HTaskPtr dummy_task;
 
     SceneGraphRoot *sgroot_A;
     SceneGraphRoot *sgroot_B;
@@ -59,6 +59,7 @@
     virtual void run_loop(HTaskPtr task_next);
     virtual void run_finish();
     virtual void run_draw(HTaskPtr task_next);
+    virtual void run_move(HTaskPtr task_next);
     virtual void exchange_sgroot();
     virtual void rendering(HTaskPtr task_next);
     virtual void common_draw(HTaskPtr task_next);