Mercurial > hg > Members > kono > Cerium
comparison Renderer/Engine/viewer.cc @ 793:c260205d3185
add light switch api
author | yutaka@localhost.localdomain |
---|---|
date | Mon, 03 May 2010 05:09:58 +0900 |
parents | f2497e0ecd7c |
children | 496a8159e840 |
comparison
equal
deleted
inserted
replaced
792:f2497e0ecd7c | 793:c260205d3185 |
---|---|
111 int light_size = size / sizeof(float); | 111 int light_size = size / sizeof(float); |
112 | 112 |
113 light_xyz_stock = (float *)manager->allocate(size); | 113 light_xyz_stock = (float *)manager->allocate(size); |
114 light_xyz = (float *)manager->allocate(size); | 114 light_xyz = (float *)manager->allocate(size); |
115 | 115 |
116 | |
117 for (int i = 0; i < light_size ; i++) { | 116 for (int i = 0; i < light_size ; i++) { |
118 light_xyz[i] = 0.0f; | 117 light_xyz[i] = 0.0f; |
119 } | 118 } |
120 | 119 |
121 for(int i = 0; i < spe_num; i++) { | 120 for(int i = 0; i < spe_num; i++) { |
126 data_load->spawn(); | 125 data_load->spawn(); |
127 } | 126 } |
128 | 127 |
129 size = light_num * sizeof(int); | 128 size = light_num * sizeof(int); |
130 light_switch = (int*)manager->allocate(size); | 129 light_switch = (int*)manager->allocate(size); |
130 | |
131 for (int i = 0; i < light_num; i++) { | 131 for (int i = 0; i < light_num; i++) { |
132 light_switch[i] = 0; | 132 light_switch[i] = 0; |
133 } | 133 } |
134 | 134 |
135 for(int i = 0; i < spe_num; i++) { | 135 for(int i = 0; i < spe_num; i++) { |
139 data_load->set_cpu((CPU_TYPE)((int)SPE_0 + i)); | 139 data_load->set_cpu((CPU_TYPE)((int)SPE_0 + i)); |
140 data_load->spawn(); | 140 data_load->spawn(); |
141 } | 141 } |
142 | 142 |
143 size = 16; // LightSysSwitch は 4byte. 残り 12byte は DMA転送の為のパディング | 143 size = 16; // LightSysSwitch は 4byte. 残り 12byte は DMA転送の為のパディング |
144 | |
145 light_sysswitch = (int*)manager->allocate(size); | |
146 | |
147 for (int i = 0; i < size / sizeof(int); i++) { | |
148 light_sysswitch[i] = 0; | |
149 } | |
144 | 150 |
145 for(int i = 0; i < spe_num; i++) { | 151 for(int i = 0; i < spe_num; i++) { |
146 HTaskPtr data_load = manager->create_task(DataLoad); | 152 HTaskPtr data_load = manager->create_task(DataLoad); |
147 data_load->set_param(0,(memaddr)size); | 153 data_load->set_param(0,(memaddr)size); |
148 data_load->set_param(1,(memaddr)LightSysSwitch); | 154 data_load->set_param(1,(memaddr)LightSysSwitch); |
322 | 328 |
323 sgroot->updateControllerState(); | 329 sgroot->updateControllerState(); |
324 sgroot->allExecute(width, height); | 330 sgroot->allExecute(width, height); |
325 light_xyz_stock = sgroot->getLightVector(); | 331 light_xyz_stock = sgroot->getLightVector(); |
326 light_switch_stock = sgroot->getLightSwitch(); | 332 light_switch_stock = sgroot->getLightSwitch(); |
333 light_sysswitch_stock = sgroot->getLightSysSwitch(); | |
327 //sgroot->checkRemove(); | 334 //sgroot->checkRemove(); |
328 | 335 |
329 // ここから下は Rendering という関数にする | 336 // ここから下は Rendering という関数にする |
330 rendering(task_next); | 337 rendering(task_next); |
331 } | 338 } |
511 //task_next = manager->create_task(Dummy); | 518 //task_next = manager->create_task(Dummy); |
512 //task_next->set_post(post2runLoop, (void*)this); | 519 //task_next->set_post(post2runLoop, (void*)this); |
513 | 520 |
514 //Light info update | 521 //Light info update |
515 | 522 |
516 HTaskPtr data_update; | 523 //HTaskPtr data_update; |
517 HTaskPtr data_update_wait; | 524 HTaskPtr data_update_wait; |
518 int light_num = 4; | 525 int light_num = 4; |
519 int size = sizeof(float)*4*light_num; //xyz+alpha(4) * light_num(4) | 526 int size = sizeof(float)*4*light_num; //xyz+alpha(4) * light_num(4) |
520 int light_size = size / sizeof(float); | 527 int light_size = size / sizeof(float); |
521 | 528 |
524 } | 531 } |
525 | 532 |
526 for (int i = 0; i < light_num; i++) { | 533 for (int i = 0; i < light_num; i++) { |
527 light_switch[i] = light_switch_stock[i]; | 534 light_switch[i] = light_switch_stock[i]; |
528 } | 535 } |
536 | |
537 light_sysswitch[0] = light_sysswitch_stock; | |
529 | 538 |
530 data_update_wait = manager->create_task(DataUpdate); | 539 data_update_wait = manager->create_task(DataUpdate); |
531 data_update_wait->add_inData(light_xyz,size); | 540 data_update_wait->add_inData(light_xyz,size); |
532 data_update_wait->set_param(0,size); | 541 data_update_wait->set_param(0,size); |
533 data_update_wait->set_param(1,Light); | 542 data_update_wait->set_param(1,Light); |
538 } | 547 } |
539 | 548 |
540 size = light_num * sizeof(int); | 549 size = light_num * sizeof(int); |
541 | 550 |
542 for (int i = 0; i < spe_num; i++) { | 551 for (int i = 0; i < spe_num; i++) { |
543 update_task_create(light_xyz,size,LightSwitch,(int)SPE_0+i,data_update_wait); | 552 update_task_create(light_switch,size,LightSwitch,(int)SPE_0+i,data_update_wait); |
544 } | 553 } |
545 | 554 |
546 size = 16; // LightSysSwitch は 4byte. 残り 12byte は DMA転送の為のパディング | 555 size = 16; // LightSysSwitch は 4byte. 残り 12byte は DMA転送の為のパディング |
547 | 556 |
548 for (int i = 0; i < spe_num; i++) { | 557 for (int i = 0; i < spe_num; i++) { |
549 update_task_create(light_xyz,size,LightSysSwitch,(int)SPE_0+i,data_update_wait); | 558 update_task_create(light_sysswitch,size,LightSysSwitch,(int)SPE_0+i,data_update_wait); |
550 } | 559 } |
551 | 560 |
552 | 561 |
553 ppack->clear(); | 562 ppack->clear(); |
554 for (int i = 0; i < spackList_length; i++) { | 563 for (int i = 0; i < spackList_length; i++) { |