diff Renderer/Engine/viewer.cc @ 908:830bcfbde3bc

fix
author Yutaka_Kinjyo
date Tue, 20 Jul 2010 04:05:07 +0900
parents 62838c1cd4b0
children 2683838396c6
line wrap: on
line diff
--- a/Renderer/Engine/viewer.cc	Tue Jul 20 02:33:48 2010 +0900
+++ b/Renderer/Engine/viewer.cc	Tue Jul 20 04:05:07 2010 +0900
@@ -478,13 +478,42 @@
   MatrixListInfo *next;
 };
 
+// 完全にMac仕様。。sg_matrix を allocate してやらないといけないよ。
+void
+copy_matrix(SceneGraphPtr sg) {
+
+  float *matrix = sg->matrix;
+  float *real_matrix = sg->real_matrix;
+
+  for (int i = 0; i < 16; i++) {
+    sg->sg_matrix[i] = matrix[i];
+    sg->sg_matrix[i+16] = real_matrix[i];
+  }
+
+}
+
+void
+print_matrix(float *matrix) {
+
+  for (int i = 0; i < 32; i++) {
+    printf("%f\n",matrix[i]);
+  }
+
+}
 
 void
 add_matrix_list(SceneGraphPtr sg, TaskManager *manager, MatrixListInfo* info) {
 
     MatrixList *matrix_list = (MatrixList*)manager->allocate(sizeof(MatrixList));
+
+    copy_matrix(sg);
+#if SPE_CREATE_POLYGON_CHECK
+    print_matrix(sg->sg_matrix);
+#endif    
+
     matrix_list->matrix = sg->sg_matrix;
     matrix_list->next = NULL;
+
     
     if (info->last != NULL) {
         info->last->next = matrix_list;
@@ -519,7 +548,11 @@
   }
 
     MatrixList *new_list = (MatrixList*)manager->allocate(sizeof(MatrixList));
+    copy_matrix(sg);
     new_list->matrix = sg->sg_matrix;
+#if SPE_CREATE_POLYGON_CHECK
+    print_matrix(sg->sg_matrix);
+#endif
     new_list->next = NULL;
 
     next->first = new_list;
@@ -576,33 +609,45 @@
   }
 }
 
-HTaskPtr
+void
+check_matrix(MatrixListInfo *matrix_info,SceneGraphPtr sg) {
+
+  for (MatrixListInfo* t = matrix_info; t != NULL; t = t->next) {
+    for (MatrixList* u = t->first; u != NULL; u = u->next) {
+      print_matrix(u->matrix);
+    }
+  }
+
+}
+
+//HTaskPtr
+void
 create_pp_task(SceneGraphPtr sg, TaskManager *manager, int spe_num, HTaskPtr task_next,
 	       MatrixListInfo *matrix_info)
 {
 
-  HTaskPtr create_pp_wait = manager->create_task(Dummy);
+  //HTaskPtr create_pp_wait = manager->create_task(Dummy);
   // どれくらい allocate するかわ、よくわからないけど。
   // とりあえず、16k ぐらいにしておく。
-  int sg_size = 16*1024;
+  // int sg_size = 16*1024;
   
-  for (int i = 0; i < spe_num; i++) {
+//   for (int i = 0; i < spe_num; i++) {
     
-    HTaskPtr data_load = manager->create_task(DataLoad);
-    data_load->set_param(0,(memaddr)sg_size);
-    data_load->set_param(1,(memaddr)SG_COORD);
-    task_next->wait_for(data_load);
-    data_load->set_cpu((CPU_TYPE)((int)SPE_0 + i));
-    data_load->spawn();
+//     HTaskPtr data_load = manager->create_task(DataLoad);
+//     data_load->set_param(0,(memaddr)sg_size);
+//     data_load->set_param(1,(memaddr)SG_COORD);
+//     task_next->wait_for(data_load);
+//     data_load->set_cpu((CPU_TYPE)((int)SPE_0 + i));
+//     data_load->spawn();
 	  
-  }
+//   }
 
   float *cur_coord_pack = sg->coord_pack;
   int coord_pack_size = sg->coord_pack_size;
 
   collect_matrix(sg, matrix_info, manager);  
 
-  return create_pp_wait;
+  //return create_pp_wait;
 
 }
 
@@ -611,8 +656,6 @@
 {
 
 #if SPE_CREATE_POLYGON
-
-
   
 #else
 
@@ -621,6 +664,10 @@
     MatrixListInfo *matrix_info = (MatrixListInfo*)manager->allocate(sizeof(MatrixListInfo));
     create_pp_task(sg, manager, spe_num, task_next, matrix_info);
 
+#if SPE_CREATE_POLYGON_CHECK
+    check_matrix(matrix_info,sg);
+#endif
+
 
     
     HTaskPtr task_create_pp = manager->create_task(CreatePolygonFromSceneGraph);