Mercurial > hg > Members > kono > Cerium
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);