# HG changeset patch # User Yutaka_Kinjyo # Date 1279005784 -32400 # Node ID d0273488f50cfdb3aa75ade858371e9d6fc21f50 # Parent 7c5a30983efa48ce4c11854e21a2ccc938669640 fix diff -r 7c5a30983efa -r d0273488f50c Renderer/Engine/SceneGraph.cc --- a/Renderer/Engine/SceneGraph.cc Mon Jul 12 04:12:13 2010 +0900 +++ b/Renderer/Engine/SceneGraph.cc Tue Jul 13 16:23:04 2010 +0900 @@ -164,7 +164,10 @@ TrianglePack を input に、polygon_pack の TriganlePack を output とする */ - int tri_pack_size = sizeof(TrianglePack)*(size/3); + init(); + + int tri_pack_size = sizeof(TrianglePack)*(size/3); + printf("tri_pack_size %d\n", tri_pack_size); tri_pack = (TrianglePackPtr)manager->allocate(tri_pack_size); texture_info = (texture_list*)manager->allocate(sizeof(texture_list)); sg_matrix = (float*)manager->allocate(sizeof(float)*32); diff -r 7c5a30983efa -r d0273488f50c Renderer/Engine/viewer.cc --- a/Renderer/Engine/viewer.cc Mon Jul 12 04:12:13 2010 +0900 +++ b/Renderer/Engine/viewer.cc Tue Jul 13 16:23:04 2010 +0900 @@ -470,6 +470,8 @@ HTaskPtr create_pp_wait = manager->create_task(Dummy); int pp_index = 0; + task_next->wait_for(create_pp_wait); + while (sg) { if (sg->flag_drawable) { @@ -530,7 +532,47 @@ } } } + + + 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(CreateSpan); + + task_create_sp->set_param(0,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->set_param(1,index_start*split_screen_h + 1); + task_create_sp->set_param(2,index_end*split_screen_h); + + 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_next->wait_for(task_create_sp); + task_create_sp->wait_for(create_pp_wait); + + task_create_sp->set_cpu(SPE_ANY); + task_create_sp->spawn(); + } + #else HTaskPtr task_create_pp = manager->create_task(CreatePolygonFromSceneGraph);