static bool redraw_pending = true;
static bool quit;
+static SDL_Window *create_window(int width, int height)
+{
+ SDL_Window *win;
+ int x = SDL_WINDOWPOS_UNDEFINED;
+ int y = SDL_WINDOWPOS_UNDEFINED;
+ unsigned int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI;
+ if(!(win = SDL_CreateWindow("vrfileman", x, y, width, height, flags))) {
+ return 0;
+ }
+ return win;
+}
+
int main(int argc, char **argv)
{
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) {
}
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
- SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);
+ SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 8);
SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 1);
- int x = SDL_WINDOWPOS_UNDEFINED;
- int y = SDL_WINDOWPOS_UNDEFINED;
- unsigned int flags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI;
- win_width = 1280;
- win_height = 800;
- if(!(win = SDL_CreateWindow("vrfileman", x, y, win_width, win_height, flags))) {
- fprintf(stderr, "failed to create window\n");
- return 1;
+ if(!(win = create_window(def_opt.width, def_opt.height))) {
+ // try again without the SRGB capability
+ SDL_GL_SetAttribute(SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, 0);
+ if(!(win = create_window(win_width, win_height))) {
+ fprintf(stderr, "failed to create window\n");
+ return 1;
+ }
+ fprintf(stderr, "failed to create sRGB-capable window, defaulting to non-linear color space\n");
+ def_opt.srgb = false;
}
if(!(ctx = SDL_GL_CreateContext(win))) {
Options opt;
+Options def_opt = {
+ 1280, 800,
+ false, // vr
+ true, // srgb
+ false, // fullscreen
+ 0 // path
+};
+
enum {
OPT_SIZE,
OPT_VR,
bool init_options(int argc, char **argv, const char *cfgfile)
{
// default options
- memset(&opt, 0, sizeof opt);
- opt.width = 1280;
- opt.height = 800;
- opt.srgb = true;
+ opt = def_opt;
optcfg *oc = optcfg_init(options);
optcfg_set_opt_callback(oc, opt_handler, 0);