Mercurial > hg > Members > kono > Cerium
comparison Renderer/Engine/viewer.cc @ 1028:3191cae6f7a2
spe/CreatePolygonFromSceneGraph not done.
author | tkaito@henri |
---|---|
date | Mon, 08 Nov 2010 19:01:25 +0900 |
parents | 55f3c5976959 |
children | a0faa0cfc271 |
comparison
equal
deleted
inserted
replaced
1027:11dee6cf7116 | 1028:3191cae6f7a2 |
---|---|
660 } | 660 } |
661 return sg_count; | 661 return sg_count; |
662 } | 662 } |
663 | 663 |
664 void | 664 void |
665 create_pp_task(SceneGraphPtr sg, TaskManager *manager, int spe_num, HTaskPtr task_next) | 665 create_pp_task(SceneGraphPtr sg, TaskManager *manager, int spe_num, HTaskPtr task_next, SceneGraphRootPtr sgroot) |
666 { | 666 { |
667 | 667 |
668 /* | 668 /* |
669 * SceneGraph を辿って coord_xyz, coord_tex, normal, matrix, real_matrix 及び、 | 669 * SceneGraph を辿って coord_xyz, coord_tex, normal, matrix, real_matrix 及び、 |
670 * PolygonPack の TrianglePack (空) を送る。pp->info.size の計算もここで。 | 670 * PolygonPack の TrianglePack (空) を送る。pp->info.size の計算もここで。 |
671 * | 671 * |
672 */ | 672 */ |
673 //int spe_num = 6; | |
674 | |
675 PolygonPackPtr pp = (PolygonPackPtr)manager->allocate(sizeof(PolygonPack)); | |
676 | 673 |
677 int sg_num = sg_drawable_num(sg); | 674 int sg_num = sg_drawable_num(sg); |
678 int sg_division = sg_num / spe_num; | 675 int sg_division = sg_num / spe_num; |
679 int residue = sg_num % spe_num; | 676 int residue = sg_num % spe_num; |
680 | 677 |
688 | 685 |
689 task_array[spe_num] = manager->create_task_array(CreatePolygonFromSceneGraph, | 686 task_array[spe_num] = manager->create_task_array(CreatePolygonFromSceneGraph, |
690 sg_division+residue,4,6,1); | 687 sg_division+residue,4,6,1); |
691 pptask[spe_num] = 0; | 688 pptask[spe_num] = 0; |
692 | 689 |
693 //int count= 0; | |
694 int k = 0; | 690 int k = 0; |
695 | 691 |
696 while (sg) { | 692 while (sg) { |
697 if (sg->flag_drawable) { | 693 if (sg->flag_drawable) { |
698 if(count < spe_num * sg_division) { | 694 if(k < spe_num * sg_division) { |
699 k %= spe_num-1; | 695 k %= spe_num-1; |
700 } else { | 696 } else { |
701 k = spe_num; | 697 k = spe_num; |
702 } | 698 } |
703 pptask[k] = task_array[k]->next_task_array(CreatePolygonFromSceneGraph,pptask[k]); | 699 pptask[k] = task_array[k]->next_task_array(CreatePolygonFromSceneGraph,pptask[k]); |
711 pptask[k]->set_param(0,(memaddr)sg->size); | 707 pptask[k]->set_param(0,(memaddr)sg->size); |
712 pptask[k]->set_param(1,(memaddr)sg->texture_info.t_w); | 708 pptask[k]->set_param(1,(memaddr)sg->texture_info.t_w); |
713 pptask[k]->set_param(2,(memaddr)sg->texture_info.t_h); | 709 pptask[k]->set_param(2,(memaddr)sg->texture_info.t_h); |
714 pptask[k]->set_param(3,(memaddr)sg->texture_info.scale_max); | 710 pptask[k]->set_param(3,(memaddr)sg->texture_info.scale_max); |
715 | 711 |
716 //pptask[k]->set_outData(0, &pp->tri[pp->info.size++], sizeof(TrianglePack)); | |
717 } | 712 } |
718 if (sg->children != NULL) { | 713 if (sg->children != NULL) { |
719 sg = sg->children; | 714 sg = sg->children; |
720 } else if (sg->brother != NULL) { | 715 } else if (sg->brother != NULL) { |
721 sg = sg->brother; | 716 sg = sg->brother; |
740 task_array[k]->spawn_task_array(pptask[k]->next()); | 735 task_array[k]->spawn_task_array(pptask[k]->next()); |
741 task_array[k]->set_cpu(SPE_ANY); | 736 task_array[k]->set_cpu(SPE_ANY); |
742 task_array[k]->spawn(); | 737 task_array[k]->spawn(); |
743 if (sgroot->gtask_array != NULL) { | 738 if (sgroot->gtask_array != NULL) { |
744 HTaskPtr game_task_array = sgroot->gtask_array->get_task_array(); | 739 HTaskPtr game_task_array = sgroot->gtask_array->get_task_array(); |
745 task_create_pp->wait_for(game_task_array); | 740 task_array[k]->wait_for(game_task_array); |
746 } | 741 } |
747 task_next->wait_for(task_create_pp); | 742 task_next->wait_for(task_array[k]); |
748 } | 743 } |
749 } | 744 } |
750 | 745 |
751 void | 746 void |
752 Viewer::common_rendering(HTaskPtr task_next, SceneGraphRoot *sgroot) | 747 Viewer::common_rendering(HTaskPtr task_next, SceneGraphRoot *sgroot) |
754 | 749 |
755 #if SPE_CREATE_POLYGON | 750 #if SPE_CREATE_POLYGON |
756 | 751 |
757 SceneGraphPtr sg = sgroot->getDrawSceneGraph(); | 752 SceneGraphPtr sg = sgroot->getDrawSceneGraph(); |
758 | 753 |
759 create_pp_task(sg, manager, spe_num, task_next); | 754 create_pp_task(sg, manager, spe_num, task_next, sgroot); |
760 | 755 |
761 #if SPE_CREATE_POLYGON_CHECK | 756 #if SPE_CREATE_POLYGON_CHECK |
762 check_matrix(matrix_info,sg); | 757 check_matrix(matrix_info,sg); |
763 #endif | 758 #endif |
764 | 759 |