comparison Renderer/Engine/viewer.cc @ 985:e40dd2384357

fix light data update
author root@henri.cr.ie.u-ryukyu.ac.jp
date Fri, 01 Oct 2010 02:49:38 +0900
parents df5185513c2d
children ac437c3cf766
comparison
equal deleted inserted replaced
984:df5185513c2d 985:e40dd2384357
760 760
761 task_create_pp->spawn(); 761 task_create_pp->spawn();
762 game_task->spawn(); 762 game_task->spawn();
763 } 763 }
764 764
765 HTaskPtr
766 Viewer::update_task_create(void *data, int size,
767 int load_id, int spe_id, HTaskPtr wait)
768 {
769
770 HTaskPtr data_update = manager->create_task(DataUpdate);
771 data_update->add_inData(data,size);
772 data_update->set_param(0,size);
773 data_update->set_param(1,load_id);
774 data_update->set_cpu((CPU_TYPE)(spe_id));
775 if (wait != NULL) {
776 wait->wait_for(data_update);
777 }
778 data_update->spawn();
779
780 return data_update;
781
782 }
783 765
784 void 766 void
785 Viewer::common_draw(HTaskPtr task_next) 767 Viewer::common_draw(HTaskPtr task_next)
786 { 768 {
787 769
788 //task_next = manager->create_task(Dummy); 770 //task_next = manager->create_task(Dummy);
789 //task_next->set_post(post2runLoop, (void*)this); 771 //task_next->set_post(post2runLoop, (void*)this);
790 772
791 //Light info update 773 //Light info update
792 774
793 //HTaskPtr data_update;
794 HTaskPtr data_update_wait;
795 int light_num = 4; 775 int light_num = 4;
796 int size = sizeof(float)*4*light_num; //xyz+alpha(4) * light_num(4) 776 int size = sizeof(float)*4*light_num; //xyz+alpha(4) * light_num(4)
797 int light_size = size / sizeof(float); 777 int light_size = size / sizeof(float);
798 778
799 for (int i = 0; i < light_size; i++) { 779 for (int i = 0; i < light_size; i++) {
803 for (int i = 0; i < light_num; i++) { 783 for (int i = 0; i < light_num; i++) {
804 light_switch[i] = light_switch_stock[i]; 784 light_switch[i] = light_switch_stock[i];
805 } 785 }
806 786
807 light_sysswitch[0] = light_sysswitch_stock; 787 light_sysswitch[0] = light_sysswitch_stock;
808 788
809 data_update_wait = manager->create_task(DataUpdate); 789
810 data_update_wait->add_inData(light_xyz,size); 790 HTask *data_update_wait = 0;
811 data_update_wait->set_param(0,size);
812 data_update_wait->set_param(1,Light);
813 data_update_wait->set_cpu((CPU_TYPE)((int)SPE_0));
814
815 for (int i = 1; i < spe_num; i++) {
816 update_task_create(light_xyz,size,Light,(int)SPE_0+i,data_update_wait);
817 }
818
819 size = light_num * sizeof(int);
820
821 for (int i = 0; i < spe_num; i++) { 791 for (int i = 0; i < spe_num; i++) {
822 update_task_create(light_switch,size,LightSwitch,(int)SPE_0+i,data_update_wait); 792 data_update_wait = manager->create_task(DataUpdate);
823 } 793 data_update_wait->set_param(0,3);
824 794 data_update_wait->set_param(1,Light); // GlobalSet ID base
825 size = 16; // LightSysSwitch は 4byte. 残り 12byte は DMA転送の為のパディング 795 data_update_wait->set_inData(0,light_xyz,size); // Light
826 796 data_update_wait->set_inData(1,light_switch,light_num * sizeof(int)); // LightSwitch = Light+1
827 for (int i = 0; i < spe_num; i++) { 797 data_update_wait->set_inData(2,light_sysswitch,16); // LightSysSwitch = Light+2
828 update_task_create(light_sysswitch,size,LightSysSwitch,(int)SPE_0+i,data_update_wait); 798 data_update_wait->set_cpu((CPU_TYPE)(SPE_0+i));
829 } 799 data_update_wait->spawn();
800 }
801
830 802
831 ppack->clear(); 803 ppack->clear();
832 804
833 for (int i = 0; i < spackList_length; i++) { 805 for (int i = 0; i < spackList_length; i++) {
834 SpanPack *spack = &spackList[i]; 806 SpanPack *spack = &spackList[i];
879 } 851 }
880 852
881 task_draw_array->spawn_task_array(task_draw->next()); 853 task_draw_array->spawn_task_array(task_draw->next());
882 task_draw_array->set_cpu(SPE_ANY); 854 task_draw_array->set_cpu(SPE_ANY);
883 task_next->wait_for(task_draw_array); 855 task_next->wait_for(task_draw_array);
884 task_draw_array->wait_for(data_update_wait);
885 task_draw_array->spawn(); 856 task_draw_array->spawn();
886 857
887 858
888 859
889 } else { 860 } else {
928 break; 899 break;
929 } 900 }
930 901
931 task_draw->set_cpu(SPE_ANY); 902 task_draw->set_cpu(SPE_ANY);
932 task_next->wait_for(task_draw); 903 task_next->wait_for(task_draw);
933 task_draw->wait_for(data_update_wait);
934 task_draw->spawn(); 904 task_draw->spawn();
935 905
936 startx += split_screen_w; 906 startx += split_screen_w;
937 endx += split_screen_w; 907 endx += split_screen_w;
938 908
942 } 912 }
943 #endif 913 #endif
944 914
945 } 915 }
946 916
947 data_update_wait->spawn();
948 if (profile) { 917 if (profile) {
949 if (frames % 50 == 49) { 918 if (frames % 50 == 49) {
950 manager->show_profile(); 919 manager->show_profile();
951 this_time = get_ticks(); 920 this_time = get_ticks();
952 if (this_time != start_time) { 921 if (this_time != start_time) {