# HG changeset patch # User hiroki@localhost.localdomain # Date 1260948571 -32400 # Node ID 0d8d2b7a343834394945badcb780bf4c8a9a7a4e # Parent fc0227b5cb5ac2652af7f85adcda291a8a78e83c not work SgChange diff -r fc0227b5cb5a -r 0d8d2b7a3438 Renderer/Engine/SgChange.cc --- 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++; } diff -r fc0227b5cb5a -r 0d8d2b7a3438 Renderer/Engine/SgChange.h --- 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);