6 static void process_event(SDL_Event *ev);
8 static SDL_Window *win;
9 static SDL_GLContext ctx;
10 static bool redraw_pending = true;
13 static SDL_Window *create_window(int width, int height)
16 int x = SDL_WINDOWPOS_UNDEFINED;
17 int y = SDL_WINDOWPOS_UNDEFINED;
18 unsigned int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI;
19 if(!(win = SDL_CreateWindow("vrfileman", x, y, width, height, flags))) {
25 int main(int argc, char **argv)
27 if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) {
28 fprintf(stderr, "failed to initialize SDL\n");
32 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
33 SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 8);
34 SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 1);
36 if(!(win = create_window(def_opt.width, def_opt.height))) {
37 // try again without the SRGB capability
38 SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 0);
39 if(!(win = create_window(win_width, win_height))) {
40 fprintf(stderr, "failed to create window\n");
43 fprintf(stderr, "failed to create sRGB-capable window, defaulting to non-linear color space\n");
47 if(!(ctx = SDL_GL_CreateContext(win))) {
48 fprintf(stderr, "failed to create OpenGL context\n");
51 SDL_GL_GetDrawableSize(win, &win_width, &win_height);
52 win_aspect = (float)win_width / (float)win_height;
54 if(!app_init(argc, argv)) {
58 app_reshape(win_width, win_height);
64 if(!SDL_WaitEvent(0)) {
65 fprintf(stderr, "error while waiting for events\n");
70 time_msec = app_get_msec();
71 time_sec = (double)time_msec / 1000.0;
72 while(SDL_PollEvent(&ev)) {
74 if(quit) goto break_evloop;
78 redraw_pending = false;
89 void app_resize(int x, int y)
91 SDL_SetWindowSize(win, x, y);
94 void app_fullscreen(bool fs)
96 SDL_SetWindowFullscreen(win, fs ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
106 redraw_pending = true;
109 void app_swap_buffers()
111 SDL_GL_SwapWindow(win);
116 return SDL_GetTicks();
119 static void process_event(SDL_Event *ev)
128 app_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED);
131 case SDL_MOUSEBUTTONDOWN:
132 case SDL_MOUSEBUTTONUP:
133 app_mouse_button(ev->button.button - SDL_BUTTON_LEFT, ev->button.state == SDL_PRESSED,
134 ev->button.x, ev->button.y);
137 case SDL_MOUSEMOTION:
138 app_mouse_motion(ev->motion.x, ev->motion.y);
141 case SDL_WINDOWEVENT:
142 if(ev->window.event == SDL_WINDOWEVENT_RESIZED) {
143 win_width = ev->window.data1;
144 win_height = ev->window.data2;
145 win_aspect = (float)win_width / (float)win_height;
146 app_reshape(win_width, win_height);