comparison Renderer/Engine/viewer.cc @ 625:60aa3f241b10

64bit mode worked on Mac OS X.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 16 Nov 2009 10:59:55 +0900
parents f21603a335aa
children dbe137505f2e
comparison
equal deleted inserted replaced
624:c7b5c99252ad 625:60aa3f241b10
236 static void 236 static void
237 post2runMoveDrawLoop(SchedTask *m, void *viewer_, void *arg) 237 post2runMoveDrawLoop(SchedTask *m, void *viewer_, void *arg)
238 { 238 {
239 Viewer *viewer = (Viewer*)viewer_; 239 Viewer *viewer = (Viewer*)viewer_;
240 240
241 // 同じ PPE 上なので sgroot(ポインタ) を add_param で送る。 241 // 同じ PPE 上なので sgroot(ポインタ) を set_param で送る。
242 //HTaskPtr send_key_task = viewer->manager->create_task(SendKey); 242 //HTaskPtr send_key_task = viewer->manager->create_task(SendKey);
243 //send_key_task->add_param((int)sgroot); 243 //send_key_task->set_param((int)sgroot);
244 // set input data -> viewer keyPtr 244 // set input data -> viewer keyPtr
245 viewer->getKey(); 245 viewer->getKey();
246 HTaskPtr update_key = viewer->manager->create_task(UpdateKey); 246 HTaskPtr update_key = viewer->manager->create_task(UpdateKey);
247 update_key->add_inData(viewer->keyPtr, sizeof(key_stat)); 247 update_key->add_inData(viewer->keyPtr, sizeof(key_stat));
248 update_key->set_cpu(SPE_0); 248 update_key->set_cpu(SPE_0);
249 update_key->spawn(); 249 update_key->spawn();
250 250
251 /* TASK_MOVE は外から引数で取ってくるべき */ 251 /* TASK_MOVE は外から引数で取ってくるべき */
252 //HTaskPtr move_task = viewer->manager->create_task(viewer->app->move_taskid); 252 //HTaskPtr move_task = viewer->manager->create_task(viewer->app->move_taskid);
253 HTaskPtr move_task = viewer->manager->create_task(Move); 253 HTaskPtr move_task = viewer->manager->create_task(Move);
254 //move_task->add_param(sgroot); 254 //move_task->set_param(sgroot);
255 255
256 //HTaskPtr draw_task = viewer->manager->create_task(Draw); 256 //HTaskPtr draw_task = viewer->manager->create_task(Draw);
257 257
258 /* rendering task test */ 258 /* rendering task test */
259 HTaskPtr draw_task = viewer->manager->create_task(Dummy); 259 HTaskPtr draw_task = viewer->manager->create_task(Dummy);
450 { 450 {
451 HTaskPtr task_create_pp = manager->create_task(CreatePolygonFromSceneGraph); 451 HTaskPtr task_create_pp = manager->create_task(CreatePolygonFromSceneGraph);
452 452
453 // SceneGraph(木構造) -> PolygonPack 453 // SceneGraph(木構造) -> PolygonPack
454 454
455 task_create_pp->add_param((memaddr)sgroot->getDrawSceneGraph()); 455 task_create_pp->set_param(0,(memaddr)sgroot->getDrawSceneGraph());
456 task_create_pp->add_param((memaddr)ppack); 456 task_create_pp->set_param(1,(memaddr)ppack);
457 457
458 task_next->wait_for(task_create_pp); 458 task_next->wait_for(task_create_pp);
459 459
460 int range_base = spe_num; 460 int range_base = spe_num;
461 // 切り上げのつもり 461 // 切り上げのつもり
470 task_create_sp->add_inData(ppack, sizeof(PolygonPack)); 470 task_create_sp->add_inData(ppack, sizeof(PolygonPack));
471 task_create_sp->add_inData(spackList_ptr, 471 task_create_sp->add_inData(spackList_ptr,
472 sizeof(SpanPack*)*spackList_length_align); 472 sizeof(SpanPack*)*spackList_length_align);
473 task_create_sp->add_inData(&spackList[index_start], sizeof(SpanPack)); 473 task_create_sp->add_inData(&spackList[index_start], sizeof(SpanPack));
474 474
475 task_create_sp->add_param(index_start); 475 task_create_sp->set_param(0,index_start);
476 476
477 /** 477 /**
478 * ex. screen_height が 480, spenum が 6 の場合、各SPEのy担当範囲 478 * ex. screen_height が 480, spenum が 6 の場合、各SPEのy担当範囲
479 * [ 1.. 80] [ 81..160] [161..240] 479 * [ 1.. 80] [ 81..160] [161..240]
480 * [241..320] [321..400] [401..480] 480 * [241..320] [321..400] [401..480]
481 * 481 *
482 * ex. screen_height が 1080, spenum が 5 の場合、 482 * ex. screen_height が 1080, spenum が 5 の場合、
483 * [ 1..216] [217..432] [433..648] 483 * [ 1..216] [217..432] [433..648]
484 * [649..864] [865..1080] 484 * [649..864] [865..1080]
485 */ 485 */
486 task_create_sp->add_param(index_start*split_screen_h + 1); 486 task_create_sp->set_param(1,index_start*split_screen_h + 1);
487 task_create_sp->add_param(index_end*split_screen_h); 487 task_create_sp->set_param(2,index_end*split_screen_h);
488 488
489 task_next->wait_for(task_create_sp); 489 task_next->wait_for(task_create_sp);
490 task_create_sp->wait_for(task_create_pp); 490 task_create_sp->wait_for(task_create_pp);
491 491
492 task_create_sp->set_cpu(SPE_ANY); 492 task_create_sp->set_cpu(SPE_ANY);
519 if (spack->info.size > 0) { 519 if (spack->info.size > 0) {
520 // Draw SpanPack 520 // Draw SpanPack
521 task_draw = manager->create_task(DrawSpan); 521 task_draw = manager->create_task(DrawSpan);
522 task_draw->add_inData(spack, sizeof(SpanPack)); 522 task_draw->add_inData(spack, sizeof(SpanPack));
523 523
524 task_draw->add_param(0, 524 task_draw->set_param(0,
525 (memaddr)&pixels[(startx-1) + this->width*(starty-1)]); 525 (memaddr)&pixels[(startx-1) + this->width*(starty-1)]);
526 task_draw->add_param(1,this->width); 526 task_draw->set_param(1,this->width);
527 527
528 for (int i = 0; i < rangey; i++) { 528 for (int i = 0; i < rangey; i++) {
529 task_draw->add_outData( 529 task_draw->add_outData(
530 &pixels[(startx-1) + this->width*(starty-1 + i) ], 530 &pixels[(startx-1) + this->width*(starty-1 + i) ],
531 (endx-startx+1)*sizeof(int)); 531 (endx-startx+1)*sizeof(int));
537 memset(&pixels[(startx-1)+this->width*(starty-1)], 537 memset(&pixels[(startx-1)+this->width*(starty-1)],
538 0, (this->width)*sizeof(int)*rangey); 538 0, (this->width)*sizeof(int)*rangey);
539 break; 539 break;
540 } 540 }
541 541
542 task_draw->add_param(2,startx); 542 task_draw->set_param(2,startx);
543 task_draw->add_param(3,endx); 543 task_draw->set_param(3,endx);
544 task_draw->add_param(4,rangey); 544 task_draw->set_param(4,rangey);
545 task_draw->set_cpu(SPE_ANY); 545 task_draw->set_cpu(SPE_ANY);
546 task_next->wait_for(task_draw); 546 task_next->wait_for(task_draw);
547 task_draw->spawn(); 547 task_draw->spawn();
548 548
549 startx += split_screen_w; 549 startx += split_screen_w;