changeset 885:d0273488f50c

fix
author Yutaka_Kinjyo
date Tue, 13 Jul 2010 16:23:04 +0900
parents 7c5a30983efa
children 0cd80fa14cd9
files Renderer/Engine/SceneGraph.cc Renderer/Engine/viewer.cc
diffstat 2 files changed, 46 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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);
--- 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);