//video_init.c - SDL/Opengl Windowing Creation/Resizing Functions // //by Peter Sperl & Ray Telford // //Opens an SDL Window and creates an OpenGL session //also able to handle resizing and fullscreening of windows //just call init_display again with different variables #include void resize_display(int w, int h, bool f) { int flags = SDL_OPENGL|SDL_HWSURFACE|(f ? SDL_FULLSCREEN : SDL_RESIZABLE); // 0 : use current bits per pixel if(!SDL_SetVideoMode(w, h, 0, flags)) { fprintf(stderr, "Video mode set failed: %s\n", SDL_GetError()); return; } SDL_ShowCursor(f ? SDL_DISABLE : SDL_ENABLE); } //init_display // //Sets screen to new width and height (w,h) //Also switches between fullscreen and windowed //with the boolean f (fullscreen) void init_display(int w, int h, int *fvw, int *fvh, bool f) { /* First, initialize SDL's video subsystem. */ if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) { fprintf(stderr, "Video initialization failed: %s\n", SDL_GetError()); return; } /* Let's get some video information. */ const SDL_VideoInfo* info = SDL_GetVideoInfo(); if(!info) { /* This should probably never happen. */ fprintf(stderr, "Video query failed: %s\n", SDL_GetError()); // todo:what is this? // projectM_vtable.disable_plugin (&projectM_vtable); return; } printf("Screen Resolution: %d x %d\n", info->current_w, info->current_h); *fvw = info->current_w; *fvh = info->current_h; SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); if (f) resize_display(*fvw, *fvh, f); else resize_display(w, h, f); }