aboutsummaryrefslogtreecommitdiff
path: root/backends/sdl/sdl_gl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/sdl/sdl_gl.cpp')
-rw-r--r--backends/sdl/sdl_gl.cpp53
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();
}