Mercurial > hg > Members > kono > Cerium
diff TaskManager/Test/test_render/viewer.cc @ 528:541013f7015c
Application ander constructing
author | game@henri.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Tue, 20 Oct 2009 23:25:22 +0900 |
parents | 99a92f6a1c59 |
children | 997d2a73a758 |
line wrap: on
line diff
--- a/TaskManager/Test/test_render/viewer.cc Mon Oct 12 11:27:13 2009 +0900 +++ b/TaskManager/Test/test_render/viewer.cc Tue Oct 20 23:25:22 2009 +0900 @@ -240,24 +240,18 @@ HTaskPtr task_next = initLoop(); // key の情報を格納する領域を確保する (global_alloc(KEY_STATUS)) HTaskPtr init_key_task = manager->create_task(INIT_KEY_TASK); - init_key_task->set_cpu(SPE_0); + init_key_task->set_cpu(SPE_0); init_key_task->spawn(); // SPE に送信する KEY_STATUS の領域確保 key_stat *key = (key_stat*)manager->allocate(sizeof(key_stat)); this->keyPtr = key; - // post2runLoop は旧バージョン用なので post2speRunLoop の様なものを別につくるべき - //task_next->set_post(post2speRunLoop, (void*)this); // set_post(function(this->run_loop()), NULL) - //task_next->spawn(); - // TASK_INIT_TEXTURE が全て終わったら DUMMY_TASK が Viewer::run_loop() を呼ぶ - - /* test */ - HTaskPtr task_switch = manager->create_task(TASK_SWITCH); task_switch->wait_for(task_next); task_switch->set_post(post2runMoveDrawLoop, (void*)this); task_switch->spawn(); + task_next->spawn(); } void @@ -314,6 +308,8 @@ //HTaskPtr send_key_task = viewer->manager->create_task(SEND_KEY); //send_key_task->add_param((int)sgroot); // set input data -> viewer keyPtr + + sgroot->updateControllerState(); viewer->getKey(); HTaskPtr update_key = viewer->manager->create_task(UPDATE_KEY); update_key->add_inData(viewer->keyPtr, sizeof(key_stat)); @@ -321,7 +317,13 @@ update_key->spawn(); /* TASK_MOVE は外から引数で取ってくるべき */ - //HTaskPtr move_task = viewer->manager->create_task(viewer->app->move_taskid); + //HTaskPtr move_task = viewer->manager->create_task(viewer->app->move_task_id); + /* + DUMMY1 app->set_task(); + DUMMY2 wait_for(DUMMY1) + sgroot->speExectute(app); + app->property_loop(sg_avairable_list); + */ //HTaskPtr move_task = viewer->manager->create_task(TASK_MOVE); //move_task->add_param(sgroot); HTaskPtr move_task = viewer->manager->create_task(TASK_DUMMY); @@ -344,8 +346,7 @@ draw_task->spawn(); switch_task->set_post(post2runMoveDrawLoop, (void*)viewer); - switch_task->spawn(); - + switch_task->spawn(); } #if 0 @@ -381,7 +382,7 @@ void Viewer::run_move(HTaskPtr task_next) { - sgroot->updateControllerState(); + //sgroot->updateControllerState(); sgroot->speExecute(width, height, app); } @@ -401,56 +402,7 @@ void Viewer::rendering(HTaskPtr task_next) { -#if 0 - HTaskPtr task_create_pp = manager->create_task(TASK_CREATE_PP2); - - // SceneGraph(木構造) -> PolygonPack - - task_create_pp->add_param((uint32)sgroot->getDrawSceneGraph()); - task_create_pp->add_param((uint32)ppack); - - task_next->wait_for(task_create_pp); - - int range_base = spe_num; - // 切り上げのつもり - int range = (spackList_length + range_base - 1) / range_base; - - for (int i = 0; i < range_base; i++) { - int index_start = range*i; - int index_end = (index_start + range >= spackList_length) - ? spackList_length : index_start + range; - - HTaskPtr task_create_sp = manager->create_task(TASK_CREATE_SPAN); - task_create_sp->add_inData(ppack, sizeof(PolygonPack)); - task_create_sp->add_inData(spackList_ptr, - sizeof(SpanPack*)*spackList_length_align); - task_create_sp->add_inData(&spackList[index_start], sizeof(SpanPack)); - - task_create_sp->add_param(index_start); - - /** - * ex. screen_height が 480, spenum が 6 の場合、各SPEのy担当範囲 - * [ 1.. 80] [ 81..160] [161..240] - * [241..320] [321..400] [401..480] - * - * ex. screen_height が 1080, spenum が 5 の場合、 - * [ 1..216] [217..432] [433..648] - * [649..864] [865..1080] - */ - task_create_sp->add_param(index_start*split_screen_h + 1); - task_create_sp->add_param(index_end*split_screen_h); - - task_next->wait_for(task_create_sp); - task_create_sp->wait_for(task_create_pp); - - task_create_sp->set_cpu(SPE_ANY); - task_create_sp->spawn(); - } - - task_create_pp->spawn(); -#else common_rendering(task_next); -#endif // Barrier 同期 // run_draw() を呼ぶ post2runDraw @@ -506,59 +458,7 @@ void Viewer::run_draw(HTaskPtr task_next) // 引数に post2runLoop を入れるようにする { -#if 0 - HTaskPtr task_draw; - - //task_next = manager->create_task(TASK_DUMMY); - //task_next->set_post(post2runLoop, (void*)this); - - ppack->clear(); - for (int i = 0; i < spackList_length; i++) { - SpanPack *spack = &spackList[i]; - int startx = 1; - int endx = split_screen_w; - - int starty = spack->info.y_top - split_screen_h + 1; - //int endy = spack->info.y_top; - int rangey = (starty + split_screen_h - 1 > this->height) - ? this->height - starty + 1 : split_screen_h; - - while (startx < this->width) { - if (spack->info.size > 0) { - // Draw SpanPack - task_draw = manager->create_task(TASK_DRAW_SPAN); - task_draw->add_inData(spack, sizeof(SpanPack)); - - task_draw->add_param( - (uint32)&pixels[(startx-1) + this->width*(starty-1)]); - task_draw->add_param(this->width); - } else { - // 7.7.3 SL1 Data Cache Range Set to Zero コマンド - // を使って、DMAでclearするべき... ということは、 - // それもSPEでやる方が良い? - memset(&pixels[(startx-1)+this->width*(starty-1)], - 0, (this->width)*sizeof(int)*rangey); - break; - } - - task_draw->add_param(startx); - task_draw->add_param(endx); - task_draw->add_param(rangey); - task_draw->set_cpu(SPE_ANY); - task_next->wait_for(task_draw); - task_draw->spawn(); - - startx += split_screen_w; - endx += split_screen_w; - - if (endx > this->width) { - endx = this->width; - } - } - } -#else common_draw(task_next); -#endif task_next->set_post(post2runLoop, (void*)this); // set_post(function(this->run_loop()), NULL) task_next->spawn();