]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/video.cpp
Attempting to add sanity to memory access: Added mmu.cpp/h
[virtualjaguar] / src / video.cpp
index b35cc1a048e50b68abad5a7dc7e8388ab26cc54d..4f33d666b8dd329780c8aac74b8afebf57626725 100644 (file)
@@ -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);