Mercurial > hg > Members > kono > Cerium
diff Renderer/Engine/viewer.cc @ 509:8148c81d2660
Cerium Rendering Library
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 12 Oct 2009 10:17:09 +0900 |
parents | 735f76483bb2 |
children | 97e1b0346597 |
line wrap: on
line diff
--- a/Renderer/Engine/viewer.cc Mon Oct 12 09:43:07 2009 +0900 +++ b/Renderer/Engine/viewer.cc Mon Oct 12 10:17:09 2009 +0900 @@ -90,25 +90,9 @@ SDL_GL_SwapBuffers(); } -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 chain_old_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(TaskManager *manager, const char *xml, int sg_number) +Viewer::run_init(TaskManager *manager, Application *app) { this->manager = manager; @@ -117,65 +101,8 @@ frames = 0; sgroot = new SceneGraphRoot(this->width, this->height); -// sgroot_2 = new SceneGraphRoot(this->width, this->height); - //sgroot->createFromXMLFile(xml); - // ここの switch は application->init(this, manager, sg_no); になるべき - switch (sg_number) { - case 0: - case 1: - create_cube_split(manager, sg_number); - break; - case 2: - case 3: - case 4: - panel_init(manager, sg_number); - break; - case 5: - universe_init(manager); - break; - case 6: - ieshoot_init(manager); - break; - case 7: - ball_bound_init(manager, this->width, this->height); - break; - case 8: - lcube_init(manager, this->width, this->height); - break; - case 9: - direction_init(manager); - break; - case 10: - init_position(manager, this->width, this->height); - break; - case 11: - // vacuum_init(manager, this->width, this->height); - break; - case 12: - untitled_init(manager); - break; - case 13: - boss1_init(manager, this->width, this->height); - break; - case 14: - init_gaplant(manager, this->width, this->height); - break; - case 15: - vacuum_init2(manager, this->width, this->height); - break; - case 16: - app = new Chain(); - app->init(manager, this->width, this->height); - speLoop(); - return; - break; - case 17: - chain_old_init(manager, this->width, this->height); - break; - default: - node_init(manager); - break; - } + + app->init(manager, this->width, this->height); mainLoop(); } @@ -398,56 +325,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 @@ -504,59 +382,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();