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