blob: 9b16674e69a7ed0ea7e589b365fd408e6e9a67be [file] [log] [blame]
//video_init.c - SDL/Opengl Windowing Creation/Resizing Functions
//
//by Peter Sperl
//
//Opens an SDL Window and creates an OpenGL session
//also able to handle resizing and fullscreening of windows
//just call init_display again with differant variables
#include <SDL/SDL.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include "video_init.h"
#include <iostream>
extern SDL_Surface *screen;
extern int texsize;
void resize_display(int w, int h, int f) {
int flags;
if (f) flags = SDL_OPENGL|SDL_HWSURFACE|SDL_FULLSCREEN;
else flags = SDL_OPENGL|SDL_HWSURFACE|SDL_RESIZABLE;
// SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
screen = SDL_SetVideoMode( w, h, 0, flags ) ;
if(screen == 0 ) {
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, int f)
{
/* Information about the current video settings. */
const SDL_VideoInfo* info = NULL;
int bpp = 0;
/* Flags we will pass into SDL_SetVideoMode. */
int flags = 0;
/* Let's get some video information. */
info = SDL_GetVideoInfo( );
if( !info ) {
/* This should probably never happen. */
fprintf( stderr, "Video query failed: %s\n",
SDL_GetError( ) );
// 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;
bpp = info->vfmt->BitsPerPixel;
//SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 );
//SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );
//SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 );
// SDL_GL_SetAttribute( SDL_GL_ACCUM_RED_SIZE, 8 );
// SDL_GL_SetAttribute( SDL_GL_ACCUM_GREEN_SIZE, 8 );
// SDL_GL_SetAttribute( SDL_GL_ACCUM_BLUE_SIZE, 8 );
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==0)
flags = SDL_OPENGL|SDL_HWSURFACE|SDL_RESIZABLE;
else flags = SDL_OPENGL|SDL_HWSURFACE|SDL_FULLSCREEN;
screen= SDL_SetVideoMode( w, h, bpp, flags ) ;
if(screen == 0 ) {
/*
* This could happen for a variety of reasons,
* including DISPLAY not being set, the specified
* resolution not being available, etc.
*/
fprintf( stderr, "Video mode set failed: %s\n",
SDL_GetError( ) );
// projectM_vtable.disable_plugin (&projectM_vtable);
return;
}
// setup_opengl(w,h);
//gluOrtho2D(0, w, 0, h);
}