X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fvideo.cpp;h=4f33d666b8dd329780c8aac74b8afebf57626725;hb=a34be0c722746101ef35a8f860d6d618deca213b;hp=b35cc1a048e50b68abad5a7dc7e8388ab26cc54d;hpb=f3e5bb2807319c210d124d6150e019130c54867b;p=virtualjaguar diff --git a/src/video.cpp b/src/video.cpp index b35cc1a..4f33d66 100644 --- a/src/video.cpp +++ b/src/video.cpp @@ -22,6 +22,19 @@ Uint32 mainSurfaceFlags; //int16 * backbuffer; uint32 * backbuffer; +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + #define RMASK 0xFF000000 + #define GMASK 0x00FF0000 + #define BMASK 0x0000FF00 + #define AMASK 0x000000FF +#else + #define RMASK 0x000000FF + #define GMASK 0x0000FF00 + #define BMASK 0x00FF0000 + #define AMASK 0xFF000000 +#endif + + // One of the reasons why OpenGL is slower then normal SDL rendering, is because // the data is being pumped into the buffer every frame with a overflow as result. // So, we going tot render every 1 frame instead of every 0 frame. @@ -37,7 +50,7 @@ int frame_ticker = 0; // // Create SDL/OpenGL surfaces // -bool InitVideo(void) +bool VideoInit(void) { // Get proper info about the platform we're running on... const SDL_VideoInfo * info = SDL_GetVideoInfo(); @@ -50,11 +63,10 @@ bool InitVideo(void) if (vjs.useOpenGL) { - // Initializing SDL attributes with OpenGL - SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + // Initializing SDL attributes with OpenGL + SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); mainSurfaceFlags = SDL_OPENGL; - } else { @@ -112,12 +124,7 @@ bool InitVideo(void) // vsWidth = 1280; //24BPP // surface = SDL_CreateRGBSurface(SDL_SWSURFACE, VIRTUAL_SCREEN_WIDTH, - surface = SDL_CreateRGBSurface(SDL_SWSURFACE, vsWidth, vsHeight, 32, -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - 0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF); -#else - 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000); -#endif//*/ + surface = SDL_CreateRGBSurface(SDL_SWSURFACE, vsWidth, vsHeight, 32, RMASK, GMASK, BMASK, AMASK); if (surface == NULL) { @@ -199,9 +206,9 @@ void RenderBackbuffer(void) // memcpy(surface->pixels, backbuffer, tom_getVideoModeWidth() * tom_getVideoModeHeight() * 2); // This memcpy is expensive--do some profiling to see what the impact is! if (vjs.renderType == RT_NORMAL) - memcpy(surface->pixels, backbuffer, tom_getVideoModeWidth() * tom_getVideoModeHeight() * 4); + memcpy(surface->pixels, backbuffer, TOMGetVideoModeWidth() * TOMGetVideoModeHeight() * 4); else if (vjs.renderType == RT_TV) - memcpy(surface->pixels, backbuffer, 1280 * tom_getVideoModeHeight() * 4); + memcpy(surface->pixels, backbuffer, 1280 * TOMGetVideoModeHeight() * 4); if (SDL_MUSTLOCK(surface)) SDL_UnlockSurface(surface); @@ -227,12 +234,7 @@ void RenderBackbuffer(void) void ResizeScreen(uint32 width, uint32 height) { SDL_FreeSurface(surface); - surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, -#if SDL_BYTEORDER == SDL_BIG_ENDIAN - 0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF); -#else - 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000); -#endif//*/ + surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, RMASK, GMASK, BMASK, AMASK); if (surface == NULL) { @@ -282,11 +284,16 @@ uint32 GetSDLScreenWidthInPixels(void) // void ToggleFullscreen(void) { + // Set our internal variable, then toggle the SDL flag vjs.fullscreen = !vjs.fullscreen; - mainSurfaceFlags &= ~SDL_FULLSCREEN; + mainSurfaceFlags ^= SDL_FULLSCREEN; +// mainSurfaceFlags = (vjs.fullscreen ? mainSurfaceFlags | SDL_FULLSCREEN : +// mainSurfaceFlags & ~SDL_FULLSCREEN); - if (vjs.fullscreen) - mainSurfaceFlags |= SDL_FULLSCREEN; +// mainSurfaceFlags &= ~SDL_FULLSCREEN; + +// if (vjs.fullscreen) +// mainSurfaceFlags |= SDL_FULLSCREEN; if (vjs.useOpenGL) { @@ -294,7 +301,7 @@ void ToggleFullscreen(void) // This way we have good scaling functionality and when the screen is resized // because of the NTSC <-> PAL resize, we only have to re-create the texture // instead of initializing the entire OpenGL texture en screens. - mainSurface = SDL_SetVideoMode(640, 480, 32, mainSurfaceFlags);//*/ + mainSurface = SDL_SetVideoMode(640, 480, 32, mainSurfaceFlags); // Reset viewport, etc. glViewport(0, 0, mainSurface->w, mainSurface->h);