Mercurial > hg > Game > Cerium
changeset 1131:220f9032d2d2 draft
RENDERING_TASK was divided into CREATE_PP_TASK and CREATE_SP_TASK.
author | root@dolphins.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Sun, 13 Feb 2011 23:29:11 +0900 |
parents | 5addc6c1d5c4 |
children | 4f16fad0dd09 |
files | Renderer/Engine/RenderingTasks.h Renderer/Engine/SgChange.cc Renderer/Engine/task/task_init.cc Renderer/Engine/viewer.cc Renderer/Engine/viewer.h |
diffstat | 5 files changed, 58 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/Renderer/Engine/RenderingTasks.h Sun Feb 13 22:34:44 2011 +0900 +++ b/Renderer/Engine/RenderingTasks.h Sun Feb 13 23:29:11 2011 +0900 @@ -16,7 +16,8 @@ EXEC_ONLY_TASK, RUN_LOOP_TASK, - RENDERING_TASK, + CREATE_PP_TASK, + CREATE_SP_TASK, DRAW_TASK, LoadTexture,
--- a/Renderer/Engine/SgChange.cc Sun Feb 13 22:34:44 2011 +0900 +++ b/Renderer/Engine/SgChange.cc Sun Feb 13 23:29:11 2011 +0900 @@ -162,8 +162,9 @@ void SgChange::rendering(HTaskPtr task_next) { - viewer->common_rendering(task_next, sgroot_B); - + viewer->rendering_pp(task_next, sgroot_B); + viewer->rendering_sp(task_next, sgroot_B); + task_next->set_post(post2runDraw, (void*)this, 0); task_next->spawn(); }
--- a/Renderer/Engine/task/task_init.cc Sun Feb 13 22:34:44 2011 +0900 +++ b/Renderer/Engine/task/task_init.cc Sun Feb 13 23:29:11 2011 +0900 @@ -16,7 +16,8 @@ SchedExternTask(EXEC_ONLY_TASK); SchedExternTask(RUN_LOOP_TASK); -SchedExternTask(RENDERING_TASK); +SchedExternTask(CREATE_PP_TASK); +SchedExternTask(CREATE_SP_TASK); SchedExternTask(DRAW_TASK); SchedExternTask(LoadTexture); @@ -60,7 +61,8 @@ SchedRegister(EXEC_ONLY_TASK); SchedRegister(RUN_LOOP_TASK); - SchedRegister(RENDERING_TASK); + SchedRegister(CREATE_PP_TASK); + SchedRegister(CREATE_SP_TASK); SchedRegister(DRAW_TASK); SchedRegister( LoadTexture);
--- a/Renderer/Engine/viewer.cc Sun Feb 13 22:34:44 2011 +0900 +++ b/Renderer/Engine/viewer.cc Sun Feb 13 23:29:11 2011 +0900 @@ -329,7 +329,7 @@ { Viewer *viewer = (Viewer*)smanager->get_param(0); - HTaskPtr task_next = smanager->create_task(RENDERING_TASK, 0, 0, 0, 0); + HTaskPtr task_next = smanager->create_task(CREATE_PP_TASK, 0, 0, 0, 0); task_next->set_param(0, (void*)viewer); viewer->run_loop(task_next); @@ -344,34 +344,62 @@ { } -SchedDefineTask1(RENDERING_TASK, rendering_task); +SchedDefineTask1(CREATE_PP_TASK, create_pp_task); static int -rendering_task(SchedTask* smanager, void* rbuf, void* wbuf) +create_pp_task(SchedTask* smanager, void* rbuf, void* wbuf) +{ + + Viewer *viewer = (Viewer*)smanager->get_param(0); + HTaskPtr task_next = smanager->create_task(CREATE_SP_TASK, 0, 0, 0, 0); + task_next->set_param(0, (void*)viewer); + + viewer->create_pp(task_next); + + return 0; + +} + +void +Viewer::create_pp(HTaskPtr task_next) { + + rendering_pp(task_next, sgroot); + + // Barrier 同期 + // run_draw() を呼ぶ post2runDraw + task_next->spawn(); // create_sp_task + +} + + +SchedDefineTask1(CREATE_SP_TASK, create_sp_task); + +static int +create_sp_task(SchedTask* smanager, void* rbuf, void* wbuf) { Viewer *viewer = (Viewer*)smanager->get_param(0); HTaskPtr task_next = smanager->create_task(DRAW_TASK, 0, 0, 0, 0); task_next->set_param(0, (void*)viewer); - viewer->rendering(task_next); + viewer->create_sp(task_next); return 0; } void -Viewer::rendering(HTaskPtr task_next) { +Viewer::create_sp(HTaskPtr task_next) { - common_rendering(task_next, sgroot); + rendering_sp(task_next, sgroot); // Barrier 同期 // run_draw() を呼ぶ post2runDraw - task_next->spawn(); // rendering_task + task_next->spawn(); // draw_task - // TASK_CREATE_SPAN が全て終わったら DUMMY_TASK が Viewer::run_draw() を呼ぶ } + SchedDefineTask1(DRAW_TASK, draw_task); static int @@ -434,12 +462,9 @@ } - - void -Viewer::common_rendering(HTaskPtr task_next, SceneGraphRoot *sgroot) +Viewer::rendering_pp(HTaskPtr task_next, SceneGraphRoot *sgroot) { - HTaskPtr game_task_array = 0; /* GameTask の処理の終了を待ってからポリゴンを作る */ @@ -448,8 +473,6 @@ } PolygonPackPtr out_pp = r[ppi].ppack; - HTaskPtr task_create_pp = manager->create_task(Dummy); - task_create_pp->set_cpu(CPU_PPE); SceneGraphPtr t = (SceneGraphPtr)manager->allocate(sizeof(SceneGraph)); //多分このsg_remove_listであってる?。チェック対象かも @@ -481,22 +504,21 @@ create_pp->wait_for(game_task_array); } - task_create_pp->wait_for(create_pp); - PolygonPackPtr tmp_pp = (PolygonPackPtr)manager->allocate(sizeof(PolygonPack)); tmp_pp->init(); create_pp->set_param(0, (memaddr)tmp_pp); out_pp = tmp_pp; create_pp->set_cpu(SPE_ANY); + task_next->wait_for(create_pp); create_pp->spawn(); - } + } + } +} - - } - - task_next->wait_for(task_create_pp); - +void +Viewer::rendering_sp(HTaskPtr task_next, SceneGraphRoot *sgroot) +{ int range_base = spe_num; // 切り上げのつもり @@ -533,18 +555,14 @@ sizeof(SpanPack*)*r[spi].spackList_length_align); task_create_sp->add_inData(&r[spi].spackList[index_start], sizeof(SpanPack)); - task_create_sp->wait_for(task_create_pp); task_next->wait_for(task_create_sp); task_create_sp->set_cpu(SPE_ANY); task_create_sp->spawn(); } - task_create_pp->spawn(); - } - void Viewer::common_draw(HTaskPtr task_next) {
--- a/Renderer/Engine/viewer.h Sun Feb 13 22:34:44 2011 +0900 +++ b/Renderer/Engine/viewer.h Sun Feb 13 23:29:11 2011 +0900 @@ -85,9 +85,12 @@ virtual void run_finish(); void run_move(HTaskPtr task_next); void run_collision(); - void rendering(HTaskPtr task_next); + void create_pp(HTaskPtr task_next); + void create_sp(HTaskPtr task_next); void common_draw(HTaskPtr task_next); - void common_rendering(HTaskPtr task_next, SceneGraphRoot *sgroot); + void rendering_pp(HTaskPtr task_next, SceneGraphRoot *sgroot); + void rendering_sp(HTaskPtr task_next, SceneGraphRoot *sgroot); + //void common_rendering(HTaskPtr task_next, SceneGraphRoot *sgroot); // void exchange_sgroot(TaskManager *manager);