Mercurial > audlegacy-plugins
view src/projectm-1.0/video_init.cxx @ 2008:b3002edfa3b9
Converted the last plugin to the new build system.
author | Eugene Paskevich <eugene@raptor.kiev.ua> |
---|---|
date | Wed, 10 Oct 2007 06:01:07 +0300 |
parents | a6d84a2cfaa7 |
children | 47a4e93ed7ce |
line wrap: on
line source
//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> extern SDL_Surface *screen; extern int texsize; void setup_opengl( int w, int h ); void close_display() { printf("quitting\n"); SDL_Quit(); } 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; } setup_opengl(w,h); 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; /* First, initialize SDL's video subsystem. */ if( SDL_Init( SDL_INIT_VIDEO | SDL_INIT_TIMER ) < 0 ) { /* Failed, exit. */ fprintf( stderr, "Video initialization failed: %s\n", SDL_GetError( ) ); //projectM_vtable.disable_plugin (&projectM_vtable); return; } /* 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; printf("set fvw and fvw\n"); bpp = info->vfmt->BitsPerPixel; printf("set bpp\n"); //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 ); printf("set gl attributes\n"); if (f==0) flags = SDL_OPENGL|SDL_HWSURFACE|SDL_RESIZABLE; else flags = SDL_OPENGL|SDL_HWSURFACE|SDL_FULLSCREEN; printf("set gl attributes2\n"); screen= SDL_SetVideoMode( w, h, bpp, flags ) ; printf("set screen\n"); 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; } printf("video init done\n"); // setup_opengl(w,h); //gluOrtho2D(0, w, 0, h); } void setup_opengl( int w, int h ) { /* Our shading model--Gouraud (smooth). */ glShadeModel( GL_SMOOTH); /* Culling. */ // glCullFace( GL_BACK ); // glFrontFace( GL_CCW ); // glEnable( GL_CULL_FACE ); /* Set the clear color. */ glClearColor( 0, 0, 0, 0 ); /* Setup our viewport. */ glViewport( 0, 0, w, h ); /* * Change to the projection matrix and set * our viewing volume. */ glMatrixMode(GL_TEXTURE); glLoadIdentity(); // gluOrtho2D(0.0, (GLfloat) width, 0.0, (GLfloat) height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); // glFrustum(0.0, height, 0.0,width,10,40); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glDrawBuffer(GL_BACK); glReadBuffer(GL_BACK); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // glBlendFunc(GL_SRC_ALPHA, GL_ONE); glEnable(GL_LINE_SMOOTH); glEnable(GL_POINT_SMOOTH); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT); // glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGB,0,0,texsize,texsize,0); //glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,texsize,texsize); glLineStipple(2, 0xAAAA); }