openvr_test1

annotate src/main.cc @ 0:806d30b46748

OpenVR test initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Wed, 13 Apr 2016 09:39:37 +0300
parents
children
rev   line source
nuclear@0 1 #include <stdio.h>
nuclear@0 2 #include <stdlib.h>
nuclear@0 3 #include <assert.h>
nuclear@0 4 #include <SDL2/SDL.h>
nuclear@0 5 #include <GL/glew.h>
nuclear@0 6 #include "app.h"
nuclear@0 7
nuclear@0 8 static bool handle_event(SDL_Event *ev);
nuclear@0 9
nuclear@0 10 static SDL_Window *win;
nuclear@0 11 static SDL_GLContext ctx;
nuclear@0 12 static bool quit;
nuclear@0 13
nuclear@0 14 int main(int argc, char **argv)
nuclear@0 15 {
nuclear@0 16 SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
nuclear@0 17 int winx = SDL_WINDOWPOS_UNDEFINED;
nuclear@0 18 int winy = SDL_WINDOWPOS_UNDEFINED;
nuclear@0 19
nuclear@0 20 if(!(win = SDL_CreateWindow("OpenVR test", winx, winy, 1024, 640, SDL_WINDOW_OPENGL))) {
nuclear@0 21 fprintf(stderr, "failed to open window\n");
nuclear@0 22 return 1;
nuclear@0 23 }
nuclear@0 24 if(!(ctx = SDL_GL_CreateContext(win))) {
nuclear@0 25 fprintf(stderr, "failed to create OpenGL context\n");
nuclear@0 26 return 1;
nuclear@0 27 }
nuclear@0 28 int xsz, ysz;
nuclear@0 29 SDL_GetWindowSize(win, &xsz, &ysz);
nuclear@0 30 app_reshape(xsz, ysz);
nuclear@0 31
nuclear@0 32 if(!app_init()) {
nuclear@0 33 return 1;
nuclear@0 34 }
nuclear@0 35
nuclear@0 36 for(;;) {
nuclear@0 37 SDL_Event ev;
nuclear@0 38 while(SDL_PollEvent(&ev)) {
nuclear@0 39 if(!handle_event(&ev) || quit) {
nuclear@0 40 goto done;
nuclear@0 41 }
nuclear@0 42 }
nuclear@0 43
nuclear@0 44 app_draw();
nuclear@0 45 assert(glGetError() == GL_NO_ERROR);
nuclear@0 46 }
nuclear@0 47
nuclear@0 48 done:
nuclear@0 49 app_shutdown();
nuclear@0 50 SDL_Quit();
nuclear@0 51 return 0;
nuclear@0 52 }
nuclear@0 53
nuclear@0 54 void app_swap_buffers()
nuclear@0 55 {
nuclear@0 56 SDL_GL_SwapWindow(win);
nuclear@0 57 }
nuclear@0 58
nuclear@0 59 void app_quit()
nuclear@0 60 {
nuclear@0 61 quit = true;
nuclear@0 62 }
nuclear@0 63
nuclear@0 64 static bool handle_event(SDL_Event *ev)
nuclear@0 65 {
nuclear@0 66 switch(ev->type) {
nuclear@0 67 case SDL_QUIT:
nuclear@0 68 return false;
nuclear@0 69
nuclear@0 70 case SDL_KEYDOWN:
nuclear@0 71 case SDL_KEYUP:
nuclear@0 72 app_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED);
nuclear@0 73 break;
nuclear@0 74
nuclear@0 75 case SDL_WINDOWEVENT:
nuclear@0 76 if(ev->window.event == SDL_WINDOWEVENT_RESIZED) {
nuclear@0 77 app_reshape(ev->window.data1, ev->window.data2);
nuclear@0 78 }
nuclear@0 79 break;
nuclear@0 80
nuclear@0 81 default:
nuclear@0 82 break;
nuclear@0 83 }
nuclear@0 84 return true;
nuclear@0 85 }