par_rast
annotate src/main_sdl.c @ 0:11f024648101
initial
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Tue, 22 Mar 2016 00:55:07 +0200 |
parents | |
children |
rev | line source |
---|---|
nuclear@0 | 1 #include <stdio.h> |
nuclear@0 | 2 #include <stdlib.h> |
nuclear@0 | 3 #include <SDL/SDL.h> |
nuclear@0 | 4 #include "app.h" |
nuclear@0 | 5 |
nuclear@0 | 6 static int handle_event(SDL_Event *ev); |
nuclear@0 | 7 |
nuclear@0 | 8 static SDL_Surface *fbsurf; |
nuclear@0 | 9 static int quit; |
nuclear@0 | 10 |
nuclear@0 | 11 int main(int argc, char **argv) |
nuclear@0 | 12 { |
nuclear@0 | 13 unsigned long msec, prev_fps_upd; |
nuclear@0 | 14 unsigned int num_frames, framerate; |
nuclear@0 | 15 |
nuclear@0 | 16 if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) { |
nuclear@0 | 17 fprintf(stderr, "failed to initialize SDL\n"); |
nuclear@0 | 18 return 1; |
nuclear@0 | 19 } |
nuclear@0 | 20 if(!(fbsurf = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE | SDL_RESIZABLE))) { |
nuclear@0 | 21 fprintf(stderr, "failed to create surface\n"); |
nuclear@0 | 22 SDL_Quit(); |
nuclear@0 | 23 return 1; |
nuclear@0 | 24 } |
nuclear@0 | 25 SDL_WM_SetCaption("parallel rasterization test", 0); |
nuclear@0 | 26 |
nuclear@0 | 27 if(app_init() == -1) { |
nuclear@0 | 28 return 1; |
nuclear@0 | 29 } |
nuclear@0 | 30 |
nuclear@0 | 31 prev_fps_upd = SDL_GetTicks(); |
nuclear@0 | 32 num_frames = 0; |
nuclear@0 | 33 |
nuclear@0 | 34 while(!quit) { |
nuclear@0 | 35 unsigned long dt; |
nuclear@0 | 36 SDL_Event ev; |
nuclear@0 | 37 while(SDL_PollEvent(&ev)) { |
nuclear@0 | 38 if(handle_event(&ev) == -1 || quit) { |
nuclear@0 | 39 goto break_main_loop; |
nuclear@0 | 40 } |
nuclear@0 | 41 } |
nuclear@0 | 42 |
nuclear@0 | 43 if(SDL_MUSTLOCK(fbsurf)) { |
nuclear@0 | 44 SDL_LockSurface(fbsurf); |
nuclear@0 | 45 } |
nuclear@0 | 46 fb_pixels = fbsurf->pixels; |
nuclear@0 | 47 fb_width = fbsurf->w; |
nuclear@0 | 48 fb_height = fbsurf->h; |
nuclear@0 | 49 |
nuclear@0 | 50 app_draw(); |
nuclear@0 | 51 |
nuclear@0 | 52 if(SDL_MUSTLOCK(fbsurf)) { |
nuclear@0 | 53 SDL_UnlockSurface(fbsurf); |
nuclear@0 | 54 } |
nuclear@0 | 55 SDL_Flip(fbsurf); |
nuclear@0 | 56 |
nuclear@0 | 57 ++num_frames; |
nuclear@0 | 58 msec = SDL_GetTicks(); |
nuclear@0 | 59 dt = msec - prev_fps_upd; |
nuclear@0 | 60 if(dt > 1500) { |
nuclear@0 | 61 char tmp[32]; |
nuclear@0 | 62 framerate = 10000 * num_frames / dt; |
nuclear@0 | 63 num_frames = 0; |
nuclear@0 | 64 prev_fps_upd = msec; |
nuclear@0 | 65 |
nuclear@0 | 66 sprintf(tmp, "fps: %u.%u\n", framerate / 10, framerate % 10); |
nuclear@0 | 67 SDL_WM_SetCaption(tmp, 0); |
nuclear@0 | 68 } |
nuclear@0 | 69 } |
nuclear@0 | 70 break_main_loop: |
nuclear@0 | 71 app_cleanup(); |
nuclear@0 | 72 SDL_Quit(); |
nuclear@0 | 73 return 0; |
nuclear@0 | 74 } |
nuclear@0 | 75 |
nuclear@0 | 76 void app_quit(void) |
nuclear@0 | 77 { |
nuclear@0 | 78 quit = 1; |
nuclear@0 | 79 } |
nuclear@0 | 80 |
nuclear@0 | 81 static int handle_event(SDL_Event *ev) |
nuclear@0 | 82 { |
nuclear@0 | 83 switch(ev->type) { |
nuclear@0 | 84 case SDL_KEYDOWN: |
nuclear@0 | 85 app_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED); |
nuclear@0 | 86 break; |
nuclear@0 | 87 |
nuclear@0 | 88 default: |
nuclear@0 | 89 break; |
nuclear@0 | 90 } |
nuclear@0 | 91 return 0; |
nuclear@0 | 92 } |