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 }