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