comparison Renderer/Engine/viewer.cc @ 514:2659376067e8

old ball_bound fix...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 20 Oct 2009 21:18:28 +0900
parents 997490a061ee
children b273767962b8
comparison
equal deleted inserted replaced
512:01b64f21405e 514:2659376067e8
10 #include "TaskManager.h" 10 #include "TaskManager.h"
11 #include <wchar.h> 11 #include <wchar.h>
12 #include "Pad.h" 12 #include "Pad.h"
13 #include "Application.h" 13 #include "Application.h"
14 14
15 static void post2runLoop(void *viewer); 15 static void post2runLoop(SchedTask *s,void *viewer,void *s);
16 static void post2runDraw(void *viewer); 16 static void post2runDraw(SchedTask *s,void *viewer,void *s);
17 static void post2speRendering(void *viewer); 17 static void post2speRendering(SchedTask *s,void *viewer,void *s);
18 static void post2speDraw(void *viewer); 18 static void post2speDraw(SchedTask *s,void *viewer,void *s);
19 static void post2runMoveDrawLoop(SchedTask *s,void *viewer,void *s);
20
21 /* measure for FPS (Frame Per Second) */
22 int start_time;
23 int this_time;
24 int frames;
19 // static void post2speRunLoop(void *viewer); 25 // static void post2speRunLoop(void *viewer);
20 //static void post2runMove(void *viewer); 26 //static void post2runMove(void *viewer);
21 //static void post2exchange_sgroot(void *viewer); 27 //static void post2exchange_sgroot(void *viewer);
22 //static void post2speRunLoop(void *viewer); 28 //static void post2speRunLoop(void *viewer);
23 static void post2runMoveDrawLoop(void *viewer);
24
25 /* measure for FPS (Frame Per Second) */
26 int start_time;
27 int this_time;
28 int frames;
29 29
30 SceneGraphRootPtr sgroot; 30 SceneGraphRootPtr sgroot;
31 //SceneGraphRootPtr sgroot_2; 31 //SceneGraphRootPtr sgroot_2;
32 32
33 /* Data Pack sent to Other CPUs (ex. SPE) */ 33 /* Data Pack sent to Other CPUs (ex. SPE) */
198 198
199 /* test */ 199 /* test */
200 200
201 HTaskPtr task_switch = manager->create_task(TASK_SWITCH); 201 HTaskPtr task_switch = manager->create_task(TASK_SWITCH);
202 task_switch->wait_for(task_next); 202 task_switch->wait_for(task_next);
203 task_switch->set_post(post2runMoveDrawLoop, (void*)this); 203 task_switch->set_post(post2runMoveDrawLoop, (void*)this, 0);
204 task_switch->spawn(); 204 task_switch->spawn();
205 } 205 }
206 206
207 void 207 void
208 Viewer::getKey() 208 Viewer::getKey()
248 keyPtr->circle = NONE; 248 keyPtr->circle = NONE;
249 } 249 }
250 } 250 }
251 251
252 static void 252 static void
253 post2runMoveDrawLoop(void *viewer_) 253 post2runMoveDrawLoop(SchedTask *m, void *viewer_, void *arg)
254 { 254 {
255 Viewer *viewer = (Viewer*)viewer_; 255 Viewer *viewer = (Viewer*)viewer_;
256 256
257 // 同じ PPE 上なので sgroot(ポインタ) を add_param で送る。 257 // 同じ PPE 上なので sgroot(ポインタ) を add_param で送る。
258 //HTaskPtr send_key_task = viewer->manager->create_task(SEND_KEY); 258 //HTaskPtr send_key_task = viewer->manager->create_task(SEND_KEY);
276 HTaskPtr draw_dummy = viewer->manager->create_task(TASK_DUMMY); 276 HTaskPtr draw_dummy = viewer->manager->create_task(TASK_DUMMY);
277 277
278 HTaskPtr switch_task = viewer->manager->create_task(TASK_SWITCH); 278 HTaskPtr switch_task = viewer->manager->create_task(TASK_SWITCH);
279 viewer->draw_dummy = draw_dummy; 279 viewer->draw_dummy = draw_dummy;
280 switch_task->wait_for(draw_dummy); 280 switch_task->wait_for(draw_dummy);
281 draw_task->set_post(post2speRendering, (void*)viewer); 281 draw_task->set_post(post2speRendering, (void*)viewer, 0);
282 282
283 switch_task->wait_for(move_task); 283 switch_task->wait_for(move_task);
284 switch_task->wait_for(draw_task); 284 switch_task->wait_for(draw_task);
285 move_task->spawn(); 285 move_task->spawn();
286 draw_task->spawn(); 286 draw_task->spawn();
287 287
288 switch_task->set_post(post2runMoveDrawLoop, (void*)viewer); 288 switch_task->set_post(post2runMoveDrawLoop, (void*)viewer, 0);
289 switch_task->spawn(); 289 switch_task->spawn();
290 290
291 } 291 }
292 292
293 #if 0 293 #if 0
303 void 303 void
304 Viewer::mainLoop() 304 Viewer::mainLoop()
305 { 305 {
306 HTaskPtr task_next = initLoop(); 306 HTaskPtr task_next = initLoop();
307 307
308 task_next->set_post(&post2runLoop, (void *)this); // set_post(function(this->run_loop()), NULL) 308 task_next->set_post(&post2runLoop, (void *)this, 0); // set_post(function(this->run_loop()), NULL)
309 task_next->spawn(); 309 task_next->spawn();
310 } 310 }
311 311
312 #if 0 312 #if 0
313 void 313 void
331 Viewer::run_collision() 331 Viewer::run_collision()
332 { 332 {
333 } 333 }
334 334
335 void 335 void
336 post2rendering(void *viewer_) 336 post2rendering(SchedTask *s, void *viewer_, void *arg)
337 { 337 {
338 Viewer *viewer = (Viewer *)viewer_; 338 Viewer *viewer = (Viewer *)viewer_;
339 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY); 339 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY);
340 viewer->rendering(task_next); 340 viewer->rendering(task_next);
341 } 341 }
345 { 345 {
346 common_rendering(task_next); 346 common_rendering(task_next);
347 347
348 // Barrier 同期 348 // Barrier 同期
349 // run_draw() を呼ぶ post2runDraw 349 // run_draw() を呼ぶ post2runDraw
350 task_next->set_post(post2runDraw, (void*)this); // set_post(function(this->run_draw()), NULL) 350 task_next->set_post(post2runDraw, (void*)this, 0); // set_post(function(this->run_draw()), NULL)
351 task_next->spawn(); 351 task_next->spawn();
352 352
353 // TASK_CREATE_SPAN が全て終わったら DUMMY_TASK が Viewer::run_draw() を呼ぶ 353 // TASK_CREATE_SPAN が全て終わったら DUMMY_TASK が Viewer::run_draw() を呼ぶ
354 } 354 }
355 355
356 static void 356 static void
357 post2runLoop(void *viewer_) 357 post2runLoop(SchedTask *s, void *viewer_, void *arg)
358 { 358 {
359 Viewer *viewer = (Viewer*)viewer_; 359 Viewer *viewer = (Viewer*)viewer_;
360 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY); 360 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY);
361 viewer->run_loop(task_next); 361 viewer->run_loop(task_next);
362 362
387 // ここから下は Rendering という関数にする 387 // ここから下は Rendering という関数にする
388 rendering(task_next); 388 rendering(task_next);
389 } 389 }
390 390
391 static void 391 static void
392 post2runDraw(void *viewer_) 392 post2runDraw(SchedTask *s, void *viewer_, void *arg)
393 { 393 {
394 Viewer *viewer = (Viewer*)viewer_; 394 Viewer *viewer = (Viewer*)viewer_;
395 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY); 395 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY);
396 viewer->run_draw(task_next); 396 viewer->run_draw(task_next);
397 397
400 void 400 void
401 Viewer::run_draw(HTaskPtr task_next) // 引数に post2runLoop を入れるようにする 401 Viewer::run_draw(HTaskPtr task_next) // 引数に post2runLoop を入れるようにする
402 { 402 {
403 common_draw(task_next); 403 common_draw(task_next);
404 404
405 task_next->set_post(post2runLoop, (void*)this); // set_post(function(this->run_loop()), NULL) 405 task_next->set_post(post2runLoop, (void*)this, 0); // set_post(function(this->run_loop()), NULL)
406 task_next->spawn(); 406 task_next->spawn();
407 // TASK_DRAW_SPAN が全て終わったら DUMMY_TASK が Viewer::run_loop() を呼ぶ 407 // TASK_DRAW_SPAN が全て終わったら DUMMY_TASK が Viewer::run_loop() を呼ぶ
408 408
409 frames++; 409 frames++;
410 } 410 }
420 // delete sgroot_2; 420 // delete sgroot_2;
421 quit(); 421 quit();
422 } 422 }
423 423
424 static void 424 static void
425 post2speRendering(void *viewer_) 425 post2speRendering(SchedTask *s, void *viewer_, void *arg)
426 { 426 {
427 Viewer *viewer = (Viewer*)viewer_; 427 Viewer *viewer = (Viewer*)viewer_;
428 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY); 428 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY);
429 viewer->spe_rendering(task_next); 429 viewer->spe_rendering(task_next);
430 } 430 }
433 Viewer::spe_rendering(HTaskPtr task_next) 433 Viewer::spe_rendering(HTaskPtr task_next)
434 { 434 {
435 common_rendering(task_next); 435 common_rendering(task_next);
436 436
437 this->draw_dummy->wait_for(task_next); 437 this->draw_dummy->wait_for(task_next);
438 task_next->set_post(post2speDraw, (void*)this); 438 task_next->set_post(post2speDraw, (void*)this, 0);
439 task_next->spawn(); 439 task_next->spawn();
440 440
441 } 441 }
442 442
443 static void 443 static void
444 post2speDraw(void *viewer_) 444 post2speDraw(SchedTask *s, void *viewer_, void *arg)
445 { 445 {
446 Viewer *viewer = (Viewer*)viewer_; 446 Viewer *viewer = (Viewer*)viewer_;
447 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY); 447 HTaskPtr task_next = viewer->manager->create_task(TASK_DUMMY);
448 viewer->spe_draw(task_next); 448 viewer->spe_draw(task_next);
449 } 449 }