changeset 1020:360f8eba78f1

create_pp_task fix. not done.
author tkaito
date Sun, 07 Nov 2010 04:24:24 +0900
parents f20ca98d47c6
children 43808a098020 55f3c5976959
files Renderer/Engine/viewer.cc
diffstat 1 files changed, 39 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/viewer.cc	Sun Nov 07 02:54:22 2010 +0900
+++ b/Renderer/Engine/viewer.cc	Sun Nov 07 04:24:24 2010 +0900
@@ -629,8 +629,10 @@
 
 /* flag_drawable な Scenegraph の総数を求める */
 int
-sg_drawable_num(SceneGraphPtr sg)
+sg_drawable_num(SceneGraphPtr scenegraph)
 {
+  SceneGraphPtr sg = scenegraph;
+
   int sg_count = 0;
   while (sg) {
     if (sg->flag_drawable) {
@@ -670,19 +672,48 @@
    */
   //int spe_num = 6;
 
-  HTask **task_array = (HTask**)manager->allocate(sizeof(HTask*)*spe_num);
-  Task **pp = (Task**)manager->allocate(sizeof(Task*)*spe_num);
+  PolygonPackPtr pp = (PolygonPackPtr)manager->allocate(sizeof(PolygonPack));
 
   int sg_num = sg_drawable_num(sg);
+  int sg_division = sg_num / spe_num;
+  int residue = sg_num % spe_num;
 
-  for (int k = 0; k < spe_num; k++) {
-    task_array[k] = manager->create_task_array(CreatePolygonFromSceneGraph,sg_num,4,6,1);
-    pp[k] = 0;
+  HTask **task_array = (HTask**)manager->allocate(sizeof(HTask*)*spe_num);
+  Task **pptask = (Task**)manager->allocate(sizeof(Task*)*spe_num);
+  
+  for (int k = 0; k < spe_num-1; k++) {
+    task_array[k] = manager->create_task_array(CreatePolygonFromSceneGraph,sg_division,4,6,1);
+    pptask[k] = 0;
   }
+  
+  task_array[spe_num] = manager->create_task_array(CreatePolygonFromSceneGraph,
+						   sg_division+residue,4,6,1);
+  pptask[spe_num] = 0;
+
+  int count= 0;
+  int k = 0;
 
   while (sg) {
     if (sg->flag_drawable) {
+      if(count < spe_num * sg_division) {
+	k %= spe_num-1;
+      } else {
+	k = spe_num;
+      }
+      pptask[k] = task_array[k]->next_task_array(CreatePolygonFromSceneGraph,pptask[k]);
+      pptask[k]->set_inData(0, &sg->coord_xyz, sizeof(float)*sg->size/3);
+      pptask[k]->set_inData(1, &sg->coord_tex, sizeof(float)*sg->size/3);
+      pptask[k]->set_inData(2, &sg->normal   , sizeof(float)*sg->size/3);
+      pptask[k]->set_inData(3, &sg->matrix   , sizeof(float)*12);
+      pptask[k]->set_inData(4, &sg->real_matrix, sizeof(float)*8);
+      pptask[k]->set_inData(5, &sg->texture_info.pixels, sizeof(uint32));
 	
+      pptask[k]->set_param(0,(memaddr)sg->size);
+      pptask[k]->set_param(1,(memaddr)sg->texture_info.t_w);
+      pptask[k]->set_param(2,(memaddr)sg->texture_info.t_h);
+      pptask[k]->set_param(3,(memaddr)sg->texture_info.scale_max);
+      
+      pptask[k]->set_outData(0, &pp->tri[pp->info.size++], sizeof(TrianglePack));
     }
     if (sg->children != NULL) {
       sg = sg->children;
@@ -702,52 +733,10 @@
 	  }
 	}
       }
-    }  
+    }
+    count++;
   }
 
-  //MatrixListInfo *matrix_info = (MatrixListInfo*)manager->allocate(sizeof(MatrixListInfo));
-  //collect_matrix(sg, matrix_info, manager);
-
-  //HTaskPtr phase_wait = manager->create_task(Dummy);
-  /*
-  for (MatrixListInfo* t = matrix_info; t != NULL; t = t->next) {
-
-    printf("list_length %d \n", t->list_length);
-
-    int alloc_size = 16*1024;
-
-    if (t->coord_pack_size < alloc_size) {
-      alloc_size = t->coord_pack_size;
-    }
-
-
-    int division_num = (t->coord_pack_size + alloc_size - 1) / alloc_size;
-    int phase_num = (division_num + spe_num -1) / spe_num;
-    int cur_point = 0;
-
-    for (int i = 0; i < phase_num; i++) {
-      
-      HTaskPtr alloc_wait = manager->create_task(Dummy);
-      coord_allocate(cur_point, t->coord_pack, spe_num,
-		     alloc_size, alloc_wait, manager);
-
-
-      for (MatrixList* u = t->first; u != NULL; u = u->next) {
-
-	//HTaskPtr free_wait = manager->create_task(Dummy);
-	
-	//phase_wait = manager->create_task(Dummy);
-	
-      }
-
-      coord_free(spe_num, manager, alloc_wait);
-      alloc_wait->spawn();
-    }
-  }
-
-  printf("-----------------------\n");
-  //return create_pp_wait;
-  */
 }
 
 void