nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include nuclear@0: #include "app.h" nuclear@0: nuclear@0: static bool handle_event(SDL_Event *ev); nuclear@0: nuclear@0: static SDL_Window *win; nuclear@0: static SDL_GLContext ctx; nuclear@0: static bool quit; nuclear@0: nuclear@0: int main(int argc, char **argv) nuclear@0: { nuclear@0: SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER); nuclear@0: int winx = SDL_WINDOWPOS_UNDEFINED; nuclear@0: int winy = SDL_WINDOWPOS_UNDEFINED; nuclear@0: nuclear@0: if(!(win = SDL_CreateWindow("OpenVR test", winx, winy, 1024, 640, SDL_WINDOW_OPENGL))) { nuclear@0: fprintf(stderr, "failed to open window\n"); nuclear@0: return 1; nuclear@0: } nuclear@0: if(!(ctx = SDL_GL_CreateContext(win))) { nuclear@0: fprintf(stderr, "failed to create OpenGL context\n"); nuclear@0: return 1; nuclear@0: } nuclear@0: int xsz, ysz; nuclear@0: SDL_GetWindowSize(win, &xsz, &ysz); nuclear@0: app_reshape(xsz, ysz); nuclear@0: nuclear@0: if(!app_init()) { nuclear@0: return 1; nuclear@0: } nuclear@0: nuclear@0: for(;;) { nuclear@0: SDL_Event ev; nuclear@0: while(SDL_PollEvent(&ev)) { nuclear@0: if(!handle_event(&ev) || quit) { nuclear@0: goto done; nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: app_draw(); nuclear@0: assert(glGetError() == GL_NO_ERROR); nuclear@0: } nuclear@0: nuclear@0: done: nuclear@0: app_shutdown(); nuclear@0: SDL_Quit(); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: void app_swap_buffers() nuclear@0: { nuclear@0: SDL_GL_SwapWindow(win); nuclear@0: } nuclear@0: nuclear@0: void app_quit() nuclear@0: { nuclear@0: quit = true; nuclear@0: } nuclear@0: nuclear@0: static bool handle_event(SDL_Event *ev) nuclear@0: { nuclear@0: switch(ev->type) { nuclear@0: case SDL_QUIT: nuclear@0: return false; nuclear@0: nuclear@0: case SDL_KEYDOWN: nuclear@0: case SDL_KEYUP: nuclear@0: app_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED); nuclear@0: break; nuclear@0: nuclear@0: case SDL_WINDOWEVENT: nuclear@0: if(ev->window.event == SDL_WINDOWEVENT_RESIZED) { nuclear@0: app_reshape(ev->window.data1, ev->window.data2); nuclear@0: } nuclear@0: break; nuclear@0: nuclear@0: default: nuclear@0: break; nuclear@0: } nuclear@0: return true; nuclear@0: }