Mercurial > hg > Members > kono > Cerium
comparison TaskManager/Test/simple_render/viewer.cpp @ 54:90523ccc4dff
*** empty log message ***
author | gongo |
---|---|
date | Sat, 16 Feb 2008 14:38:36 +0900 |
parents | c964110017c8 |
children | 54355e641172 |
comparison
equal
deleted
inserted
replaced
53:0c8ae614d421 | 54:90523ccc4dff |
---|---|
207 int frames; | 207 int frames; |
208 SDL_Surface *bitmap; | 208 SDL_Surface *bitmap; |
209 SDL_PixelFormat *pf; | 209 SDL_PixelFormat *pf; |
210 Uint32 background; | 210 Uint32 background; |
211 Polygon *p; | 211 Polygon *p; |
212 SceneGraphPack *sgp; | 212 //SceneGraphPack *sgp; |
213 PolygonPack *pp; | 213 //PolygonPack *pp; |
214 DmaManager *sgp_buff; | |
215 DmaManager *pp_buff; | |
214 }; | 216 }; |
215 | 217 |
216 struct run_arg_t *arg; | 218 struct run_arg_t *arg; |
217 | 219 |
220 // run_arg_t に書くのがめんどいからって | |
221 // global に書くのもどうか | |
222 int start_time; | |
223 int this_time; | |
224 int frames; | |
225 SDL_Surface *bitmap; | |
226 SDL_PixelFormat *pixelFormat; | |
227 Uint32 background; | |
228 Polygon *polygon; | |
229 //SceneGraphPack *sgp; | |
230 //PolygonPack *pp; | |
231 DmaBuffer *sgp_buff; | |
232 DmaBuffer *pp_buff; | |
233 | |
218 void | 234 void |
219 Viewer::run_init() | 235 Viewer::run_init() |
220 { | 236 { |
221 arg = new run_arg_t; | |
222 HTaskPtr task; | 237 HTaskPtr task; |
223 int fd; | 238 int fd; |
224 | 239 |
225 arg->start_time = get_ticks(); | 240 SceneGraphPack *sgp; |
226 arg->this_time = 0; | 241 |
227 arg->frames = 0; | 242 start_time = get_ticks(); |
228 | 243 this_time = 0; |
229 arg->pf = screen->format; | 244 frames = 0; |
230 arg->background = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00); | 245 |
231 arg->p = new Polygon; | 246 pixelFormat = screen->format; |
232 arg->p->set_data("cube.xml"); | 247 background = SDL_MapRGB(screen->format, 0x00, 0x00, 0x00); |
233 arg->p->viewer = this; | 248 polygon = new Polygon; |
234 arg->sgp = new SceneGraphPack; | 249 polygon->set_data("cube.xml"); |
235 create_sgp(arg->p, arg->sgp); | 250 polygon->viewer = this; |
236 arg->pp = new PolygonPack; | 251 |
252 //sgp = new SceneGraphPack; | |
253 //create_sgp(arg->p, arg->sgp); | |
254 | |
255 // 通信用 buffer の allocate | |
256 // これじゃないと通信用に使えない(ように処理を書かないと!) | |
257 sgp_buff = manager->allocate(sizeof(SceneGraphPack)); | |
258 | |
259 sgp_buff->get_buffer(&sgp); | |
260 create_sgp(polygon, sgp); | |
261 sgp_buff->swap_buffer(); | |
262 | |
263 sgp_buff->get_buffer(&sgp); | |
264 create_sgp(polygon, sgp); | |
265 sgp_buff->swap_buffer(); | |
266 | |
267 //pp = new PolygonPack; | |
268 pp_buff = manager->allocate(sizeof(PolygonPack)); | |
237 | 269 |
238 pixels = new Uint32[width*height]; | 270 pixels = new Uint32[width*height]; |
239 | 271 |
240 graph_line(); | 272 graph_line(); |
241 | 273 |
242 arg->bitmap = SDL_CreateRGBSurfaceFrom((void *)pixels, width, height, 32, | 274 bitmap = SDL_CreateRGBSurfaceFrom((void *)pixels, width, height, 32, |
243 width*4, redMask, greenMask, | 275 width*4, redMask, greenMask, |
244 blueMask, alphaMask); | 276 blueMask, alphaMask); |
245 | 277 |
246 fd = manager->open("ViewerRunLoop"); | 278 fd = manager->open("ViewerRunLoop"); |
247 task = manager->create_task(fd, 0, 0, 0, NULL); | 279 task = manager->create_task(fd, 0, 0, 0, NULL); |
260 | 292 |
261 HTaskPtr task; | 293 HTaskPtr task; |
262 int fd; | 294 int fd; |
263 | 295 |
264 if (quit_check()) { | 296 if (quit_check()) { |
265 arg->this_time = get_ticks(); | 297 this_time = get_ticks(); |
266 fd_finish = manager->open("ViewerRunFinish"); | 298 fd_finish = manager->open("ViewerRunFinish"); |
267 task_finish = manager->create_task(fd_finish, 0, 0, 0, NULL); | 299 task_finish = manager->create_task(fd_finish, 0, 0, 0, NULL); |
268 manager->spawn_task(task_finish); | 300 manager->spawn_task(task_finish); |
269 return; | 301 return; |
270 } | 302 } |
277 fd_update_sgp = manager->open("UpdateSGP"); | 309 fd_update_sgp = manager->open("UpdateSGP"); |
278 fd_create_pp = manager->open("CreatePP"); | 310 fd_create_pp = manager->open("CreatePP"); |
279 fd = manager->open("ViewerRunDraw"); | 311 fd = manager->open("ViewerRunDraw"); |
280 task_update_sgp = manager->create_task(fd_update_sgp, | 312 task_update_sgp = manager->create_task(fd_update_sgp, |
281 sizeof(SceneGraphPack), | 313 sizeof(SceneGraphPack), |
282 (unsigned int)arg->sgp, | 314 sgp_buff, sgp_buff, NULL); |
283 (unsigned int)arg->sgp, | |
284 NULL); | |
285 task_create_pp = manager->create_task(fd_create_pp, | 315 task_create_pp = manager->create_task(fd_create_pp, |
286 sizeof(SceneGraphPack), | 316 sizeof(SceneGraphPack), |
287 (unsigned int)arg->sgp, | 317 sgp_buff, pp_buff, NULL); |
288 (unsigned int)arg->pp, | |
289 NULL); | |
290 task = manager->create_task(fd, 0, 0, 0, NULL); | 318 task = manager->create_task(fd, 0, 0, 0, NULL); |
291 | 319 |
292 manager->set_task_depend(task_update_sgp, task); | 320 manager->set_task_depend(task_update_sgp, task); |
293 manager->set_task_depend(task_create_pp, task); | 321 manager->set_task_depend(task_create_pp, task); |
294 | 322 |
295 manager->spawn_task(task_update_sgp); | 323 manager->spawn_task(task_update_sgp); |
296 manager->spawn_task(task_create_pp); | 324 manager->spawn_task(task_create_pp); |
297 manager->spawn_task(task); | 325 manager->spawn_task(task); |
326 | |
327 sgp_buff->swap_buffer(); | |
298 } | 328 } |
299 | 329 |
300 void | 330 void |
301 Viewer::run_draw(void) | 331 Viewer::run_draw(void) |
302 { | 332 { |
303 HTaskPtr task; | 333 HTaskPtr task; |
304 int fd; | 334 int fd; |
305 | 335 |
306 arg->p->draw(arg->pp); // test draw of PolygonPack | 336 PolygonPack *pp; |
307 | 337 |
308 SDL_BlitSurface(arg->bitmap, NULL, screen, NULL); | 338 pp_buff->get_buffer(&pp); |
339 | |
340 polygon->draw(pp); // test draw of PolygonPack | |
341 SDL_BlitSurface(bitmap, NULL, screen, NULL); | |
309 SDL_UpdateRect(screen, 0, 0, 0, 0); | 342 SDL_UpdateRect(screen, 0, 0, 0, 0); |
310 | 343 |
311 arg->frames++; | 344 frames++; |
312 | 345 |
313 fd = manager->open("ViewerRunLoop"); | 346 fd = manager->open("ViewerRunLoop"); |
314 task = manager->create_task(fd, 0, 0, 0, NULL); | 347 task = manager->create_task(fd, 0, 0, 0, NULL); |
315 manager->spawn_task(task); | 348 manager->spawn_task(task); |
316 } | 349 } |
317 | 350 |
318 void | 351 void |
319 Viewer::run_finish(void) | 352 Viewer::run_finish(void) |
320 { | 353 { |
321 if (arg->this_time != arg->start_time) { | 354 if (this_time != start_time) { |
322 cout<< (((float)arg->frames)/(arg->this_time-arg->start_time))*1000.0 << " FPS\n"; | 355 cout<< (((float)frames)/(this_time-start_time))*1000.0 << " FPS\n"; |
323 } | 356 } |
324 | 357 |
325 SDL_FreeSurface(arg->bitmap); | 358 SDL_FreeSurface(bitmap); |
326 delete [] pixels; | 359 delete [] pixels; |
327 arg->p->delete_data(); | 360 polygon->delete_data(); |
328 delete arg->p; | 361 delete polygon; |
329 delete arg->sgp; | 362 delete sgp_buff; |
330 delete arg->pp; | 363 delete pp_buff; |
331 quit(); | 364 quit(); |
332 | 365 |
333 delete arg; | 366 delete arg; |
334 } | 367 } |
335 | 368 |