blob: 7805cb9cb979924cb1021e1b3494e8c3b6020781 [file] [log] [blame]
//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 <SDL/SDL.h>
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);
}