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