diff TaskManager/Test/test_render/viewer.cpp @ 397:a4f690f44842

delete manager (in kernel/ppe/TaskManager.h) don't move.
author game@henri.cr.ie.u-ryukyu.ac.jp
date Sun, 20 Sep 2009 18:55:26 +0900
parents d1f1e27d0a12
children e621024b6ef1
line wrap: on
line diff
--- a/TaskManager/Test/test_render/viewer.cpp	Fri Sep 18 18:28:56 2009 +0900
+++ b/TaskManager/Test/test_render/viewer.cpp	Sun Sep 20 18:55:26 2009 +0900
@@ -11,13 +11,10 @@
 #include <wchar.h>
 #include "Pad.h"
 
-HTaskPtr move_DUMMY = manager->create_task(TASK_DUMMY);
-HTaskPtr draw_DUMMY = manager->create_task(TASK_DUMMY);
-
-extern void post2runLoop(void *);
-extern void post2runDraw(void *);
-extern void post2runMove(void *);
-extern void post2exchange_sgroot(void *);
+static void post2runLoop(void *viewer);
+static void post2runDraw(void *viewer);
+static void post2runMove(void *viewer);
+//static void post2exchange_sgroot(void *viewer);
 
 
 /* measure for FPS (Frame Per Second) */
@@ -89,27 +86,28 @@
     SDL_GL_SwapBuffers();
 }
 
-extern void node_init(void);
-extern void create_cube_split(int);
-extern void panel_init(int);
-extern void universe_init(void);
-extern void ieshoot_init(void);
-extern void ball_bound_init(int, int);
-extern void lcube_init(int, int);
-extern void direction_init(void);
-extern void init_position(int, int);
-extern void vacuum_init(int w, int h);
-extern void untitled_init(void);
-extern void chain_init(int w, int h);
-extern void boss1_init(int w, int h);
-extern void init_gaplant(int w, int h);
-extern void vacuum_init2(int w, int h);
+extern void node_init(TaskManager *manager);
+extern void create_cube_split(TaskManager *manager, int);
+extern void panel_init(TaskManager *manager, int bg);
+extern void universe_init(TaskManager *manager);
+extern void ieshoot_init(TaskManager *manager);
+extern void ball_bound_init(TaskManager *manager, int, int);
+extern void lcube_init(TaskManager *manager, int, int);
+extern void direction_init(TaskManager *manager);
+extern void init_position(TaskManager *manager, int, int);
+extern void vacuum_init(TaskManager *manager, int w, int h);
+extern void untitled_init(TaskManager *manager);
+extern void chain_init(TaskManager *manager, int w, int h);
+extern void boss1_init(TaskManager *manager, int w, int h);
+extern void init_gaplant(TaskManager *manager, int w, int h);
+extern void vacuum_init2(TaskManager *manager, int w, int h);
 
 void
-Viewer::run_init(const char *xml, int sg_number)
+Viewer::run_init(TaskManager *manager, const char *xml, int sg_number)
 {
     HTaskPtr task_next;
     HTaskPtr task_tex;
+    this->manager = manager;
 
     start_time = get_ticks();
     this_time  = 0;
@@ -122,51 +120,51 @@
     switch (sg_number) {
     case 0:
     case 1:
-      create_cube_split(sg_number);
+	create_cube_split(manager, sg_number);
         break;
     case 2:
     case 3:
     case 4:
-      panel_init(sg_number);
+	panel_init(manager, sg_number);
         break;
     case 5:
-      universe_init();
+	universe_init(manager);
         break;
     case 6:
-      ieshoot_init();
+	ieshoot_init(manager);
         break;
     case 7:
-      ball_bound_init(this->width, this->height);
+	ball_bound_init(manager, this->width, this->height);
         break;
     case 8:
-      lcube_init(this->width, this->height);
+	lcube_init(manager, this->width, this->height);
         break;
     case 9:
-      direction_init();
+	direction_init(manager);
         break;
     case 10:
-      init_position(this->width, this->height);
+	init_position(manager, this->width, this->height);
         break;
     case 11:
-        //        vacuum_init(this->width, this->height);
+        //        vacuum_init(manager, this->width, this->height);
         break;
     case 12:
-	untitled_init();
+	untitled_init(manager);
         break;
     case 13:
-      boss1_init(this->width, this->height);
+	boss1_init(manager, this->width, this->height);
         break;
     case 14:
-	init_gaplant(this->width, this->height);
+	init_gaplant(manager, this->width, this->height);
         break;
     case 15:
-      vacuum_init2(this->width, this->height);
+	vacuum_init2(manager, this->width, this->height);
         break;
     case 16:
-        chain_init(this->width, this-> height);
+        chain_init(manager, this->width, this-> height);
         break;
     default:
-        node_init();
+        node_init(manager);
         break;
     }
 
@@ -224,42 +222,58 @@
         task_tex->spawn();
     }
 
-    task_next->set_post(&post2runLoop, NULL); // set_post(function(this->run_loop()), NULL)
-    task_next->set_post(&post2runMove, NULL); // set_post(function(this->run_move()), NULL)
+    task_next->set_post(&post2runLoop, (void *)this); // set_post(function(this->run_loop()), NULL)
     task_next->spawn();
     // TASK_INIT_TEXTURE が全て終わったら DUMMY_TASK が Viewer::run_loop() を呼ぶ
+
+
+    /*
+    HTaskPtr move_task = manager->create_task(RUN_MOVE_TASK);
+    HTaskPtr draw_task = manager->create_task(RUN_DRAW_TASK);
+    move_task->spawn();
+    draw_task->spawn();
+    
+    task_next->wait_for(RUN_MOVE_TASK);
+    task_next->wait_for(RUN_DRAW_TASK);
+    task_next->set_post(&post2runExchange, (void *)this);
+    task_next->spawn();
+    */
+}
+
+
+/*
+static void
+post2exchange_sgroot(void *viewer_)
+{
+    Viewer *viewer = (Viewer*)viewer_;
+    HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY);
+    viewer->exchange_sgroot(task_next);
 }
 
 void
-Viewer::exchange_sgroot()
+Viewer::exchange_sgroot(TaskManager *manager)
 {
+
     SceneGraphRootPtr tmp = sgroot;
     sgroot = sgroot_2;
     sgroot_2 = tmp;
-    HTaskPtr task_next = manager->create_task(TASK_DUMMY);
-    task_next->set_post(&post2runLoop, NULL); // set_post(function(this->run_loop()), NULL)
-    task_next->set_post(&post2runMove, NULL); // set_post(function(this->run_move()), NULL)
-    task_next->spawn();
     
 }
+*/
+
+static void
+post2runMove(void *viewer_)
+{
+    Viewer *viewer = (Viewer*)viewer_;
+    HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY);
+    viewer->run_move(task_next);
+}
 
 void
-Viewer::run_move()
+Viewer::run_move(HTaskPtr task_next)
 {
     sgroot->updateControllerState();
     sgroot->allExecute(width, height);
-    // run_loop と待ち合わせの処理
-
-    HTaskPtr task_next;
-    task_next = manager->create_task(TASK_DUMMY);
-
-    task_next->wait_for(draw_DUMMY);
-    task_next->wait_for(move_DUMMY);
-    move_DUMMY->spawn();
-    //task_next->set_post(exchange_sgroot, NULL); // set_post(function(this->run_loop()), NULL)
-    task_next->spawn();    
-
-
 }
 
 void
@@ -268,13 +282,10 @@
 }
 
 void 
-Viewer::rendering()
+Viewer::rendering(HTaskPtr task_next)
 {
     HTaskPtr task_create_pp = NULL;
     HTaskPtr task_create_sp = NULL;
-    HTaskPtr task_next;
-    
-    task_next = manager->create_task(TASK_DUMMY);
     
     // SceneGraph(木構造) -> PolygonPack
     task_create_pp = manager->create_task(TASK_CREATE_PP2);
@@ -323,16 +334,24 @@
 
     // Barrier 同期
     // run_draw() を呼ぶ post2runDraw
-    task_next->set_post(post2runDraw, NULL); // set_post(function(this->run_draw()), NULL)
+    task_next->set_post(post2runDraw, (void*)this); // set_post(function(this->run_draw()), NULL)
     task_next->spawn();
     // TASK_CREATE_SPAN が全て終わったら DUMMY_TASK が Viewer::run_draw() を呼ぶ
 }
 
+static void
+post2runLoop(void *viewer_)
+{
+    Viewer *viewer = (Viewer*)viewer_;
+    HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY);
+    viewer->run_loop(task_next);
+
+}
+
 void
-Viewer::run_loop()
+Viewer::run_loop(HTaskPtr task_next)
 {
     bool quit_flg;
-
     quit_flg = quit_check();
     if (quit_flg == true) {
         this_time = get_ticks();
@@ -346,23 +365,31 @@
         spackList[i-1].reinit(i*split_screen_h);
     }
     
-    //task_next = manager->create_task(TASK_DUMMY);
-
+    task_next = manager->create_task(TASK_DUMMY);
+    run_move(task_next);
     //sgroot->updateControllerState();
     //sgroot->allExecute(width, height);
     //sgroot->checkRemove();
 
     // ここから下は Rendering という関数にする
-    rendering();
+    rendering(task_next);
+}
+
+static void
+post2runDraw(void *viewer_)
+{
+    Viewer *viewer = (Viewer*)viewer_;
+    HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY);
+    viewer->run_draw(task_next);
+
 }
 
 void
-Viewer::run_draw() // 引数に post2runLoop を入れるようにする
+Viewer::run_draw(HTaskPtr task_next) // 引数に post2runLoop を入れるようにする
 {
-    HTaskPtr task_next;
     HTaskPtr task_draw;
 
-    task_next = manager->create_task(TASK_DUMMY);
+    //task_next = manager->create_task(TASK_DUMMY);
     //task_next->set_post(post2runLoop, NULL);
 
     ppack->clear();
@@ -391,6 +418,8 @@
 		break;
             }
 
+
+	    task_next->spawn();
             task_draw->add_param(startx);
             task_draw->add_param(endx);
             task_draw->add_param(rangey);
@@ -407,11 +436,9 @@
         }
     }
     
-    task_next->wait_for(draw_DUMMY);
-    task_next->wait_for(move_DUMMY);
-    draw_DUMMY->spawn();
-    task_next->set_post(post2exchange_sgroot, NULL); // set_post(function(this->run_loop()), NULL)
-    task_next->spawn();    
+
+    task_next->set_post(post2runLoop, (void*)this); // set_post(function(this->run_loop()), NULL)
+    task_next->spawn(); 
     // TASK_DRAW_SPAN が全て終わったら DUMMY_TASK が Viewer::run_loop() を呼ぶ
 
     frames++;