Mercurial > audlegacy-plugins
view src/projectm-1.0/video_init.cxx @ 3166:8cbf077ba5d0
alsa-ng: Software pause, so we don't have to use snd_pcm_pause(), which is not part of the safe ALSA subset.
Also, make heavy use of thread signalling to remove crap like:
while (condition != true && pcm_going)
g_usleep(10000);
That's... so XMMS.
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Fri, 15 May 2009 00:02:47 -0500 |
parents | c733dd93af62 |
children |
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> #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); // XXX // *fvw = w; // *fvh = 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); }