diff options
Diffstat (limited to 'backends/sdl/sdl_gl.cpp')
-rw-r--r-- | backends/sdl/sdl_gl.cpp | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/backends/sdl/sdl_gl.cpp b/backends/sdl/sdl_gl.cpp index d29029ddfe..949baf7b1d 100644 --- a/backends/sdl/sdl_gl.cpp +++ b/backends/sdl/sdl_gl.cpp @@ -54,7 +54,6 @@ protected: int _glFlags; int _glScreenStart; bool _glBilinearFilter; - bool _glAspectRatio; bool _usingOpenGL; SDL_Surface *tmpSurface; // Used for black rectangles blitting SDL_Rect tmpBlackRect; // Black rectangle at end of the GL screen @@ -79,7 +78,6 @@ OSystem_SDL_OpenGL::OSystem_SDL_OpenGL() { _glScreenStart = 0; _glBilinearFilter = true; - _glAspectRatio = false; _usingOpenGL = false; // false => Switch to filters used in the sdl.cpp version _glBottomOfTexture = 256; // height is always 256 // 640x480 resolution @@ -165,7 +163,7 @@ void OSystem_SDL_OpenGL::load_gfx_mode() { case GFX_NORMAL: normal_mode:; - _scaleFactor = 1; + _scaleFactor = _usingOpenGL ? 2 : 1; _scaler_proc = Normal1x; break; default: @@ -199,8 +197,7 @@ normal_mode:; fb2gl.init(_glWindow.w, _glWindow.h, 0, _glScreenStart? 15: 70, _glFlags); - } - else { // SDL backend + } else { // SDL backend _hwscreen = SDL_SetVideoMode(_screenWidth * _scaleFactor, _screenHeight * _scaleFactor, 16, _full_screen ? (SDL_FULLSCREEN|SDL_SWSURFACE) : SDL_SWSURFACE @@ -234,8 +231,7 @@ normal_mode:; Gmask, Bmask, Amask); - } - else { // SDL backend + } else { // SDL backend _tmpscreen = SDL_CreateRGBSurfaceFrom(tmp_screen, _tmpScreenWidth, _screenHeight + 3, @@ -346,8 +342,7 @@ void OSystem_SDL_OpenGL::update_screen() { SDL_FillRect(tmpSurface, &blackrect, 0); fb2gl.blit16(tmpSurface, 1, &blackrect, 0, 0); - } - else { // SDL backend + } else { // SDL backend SDL_Rect blackrect = {0, 0, _screenWidth * _scaleFactor, _newShakePos * _scaleFactor}; SDL_FillRect(_hwscreen, &blackrect, 0); } @@ -545,9 +540,30 @@ uint32 OSystem_SDL_OpenGL::property(int param, Property *value) { #endif return 1; - } - else if (param == PROP_SET_GFX_MODE) { + } else if (param == PROP_TOGGLE_ASPECT_RATIO) { + if (!_usingOpenGL) { + _usingOpenGL = true; + _mode = GFX_NORMAL; + hotswap_gfx_mode(); + } + + _adjustAspectRatio ^= true; + if (_adjustAspectRatio) { + // Don't use the whole screen (black borders) + fb2gl.init(0, 0, 0, 15, _glFlags); + _glScreenStart = 20; + SDL_FillRect(tmpSurface, &tmpBlackRect, 0); + fb2gl.blit16(tmpSurface, 1, &tmpBlackRect, 0, 0); + } else { + // Use the whole screen + fb2gl.init(0, 0, 0, 70, _glFlags); + _glScreenStart = 0; + } + SDL_Rect full = {0, 0, _screenWidth, _screenHeight}; + fb2gl.blit16(_tmpscreen, 1, &full, 0, _glScreenStart); + fb2gl.display(); + } else if (param == PROP_SET_GFX_MODE) { if (value->gfx_mode > 10) { // OpenGL modes if (!_usingOpenGL) { @@ -562,20 +578,6 @@ uint32 OSystem_SDL_OpenGL::property(int param, Property *value) { _glBilinearFilter ^= true; fb2gl.setBilinearMode(_glBilinearFilter); break; - case GFX_ASPECTRATIO: - _glAspectRatio ^= true; - if (_glAspectRatio) { - // Don't use the whole screen (black borders) - fb2gl.init(0, 0, 0, 15, _glFlags); - _glScreenStart = 20; - SDL_FillRect(tmpSurface, &tmpBlackRect, 0); - fb2gl.blit16(tmpSurface, 1, &tmpBlackRect, 0, 0); - } else { - // Use the whole screen - fb2gl.init(0, 0, 0, 70, _glFlags); - _glScreenStart = 0; - } - break; default: // SDL backend if (value->gfx_mode >= 10) return 0; @@ -589,6 +591,7 @@ uint32 OSystem_SDL_OpenGL::property(int param, Property *value) { }; if (_usingOpenGL) { + SDL_Rect full = {0, 0, _screenWidth, _screenHeight}; fb2gl.blit16(_tmpscreen, 1, &full, 0, _glScreenStart); fb2gl.display(); } |