Mercurial > hg > Members > kono > Cerium
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++;