| 571 | |
| 572 | |
| 573 | void event_loop(void) |
| 574 | { |
| 575 | fbx_struct fb[10]; |
| 576 | int frame = 0, inc = -1; bool first = true; |
| 577 | unsigned long frames = 0; |
| 578 | Timer timer; |
| 579 | double elapsed, mpixels = 0.; |
| 580 | char temps[256]; |
| 581 | |
| 582 | for(int i = 0; i < 10; i++) |
| 583 | { |
| 584 | memset(&fb[i], 0, sizeof(fb[i])); |
| 585 | } |
| 586 | |
| 587 | try |
| 588 | { |
| 589 | for(int i = 0; i < 10; i++) |
| 590 | { |
| 591 | TRY_FBX(fbx_init(&fb[i], wh, 0, 0, doShm ? 1 : 0)); |
| 592 | snprintf(temps, 256, "frame%d.ppm", i); |
| 593 | unsigned char *buf = NULL; int tempw = 0, temph = 0; |
| 594 | if(bmp_load(temps, &buf, &tempw, 1, &temph, fb[i].pf->id, |
| 595 | BMPORN_TOPDOWN) == -1) |
| 596 | THROW(bmp_geterr()); |
| 597 | for(int j = 0; j < min(temph, fb[i].height); j++) |
| 598 | memcpy(&fb[i].bits[fb[i].pitch * j], &buf[tempw * fb[i].pf->size * j], |
| 599 | min(tempw, fb[i].width) * fb[i].pf->size); |
| 600 | free(buf); |
| 601 | } |
| 602 | |
| 603 | timer.start(); |
| 604 | while(1) |
| 605 | { |
| 606 | advance = false; doDisplay = false; |
| 607 | if(first) |
| 608 | { |
| 609 | doDisplay = true; first = false; |
| 610 | } |
| 611 | |
| 612 | #ifdef _WIN32 |
| 613 | |
| 614 | int ret; MSG msg; |
| 615 | if((ret = GetMessage(&msg, NULL, 0, 0)) == -1) { THROW_W32(); } |
| 616 | else if(ret == 0) |
| 617 | { |
| 618 | for(int i = 0; i < 10; i++) fbx_term(&fb[i]); |
| 619 | break; |
| 620 | } |
| 621 | TranslateMessage(&msg); |
| 622 | DispatchMessage(&msg); |
| 623 | |
| 624 | #else |
| 625 | |
| 626 | while(1) |
| 627 | { |
| 628 | XEvent event; |
| 629 | if(XPending(wh.dpy) > 0) XNextEvent(wh.dpy, &event); |
| 630 | else break; |
no test coverage detected