diff options
| -rw-r--r-- | backends/graphics/opengl/opengl-graphics.cpp | 8 | ||||
| -rw-r--r-- | backends/graphics/opengl/opengl-graphics.h | 5 | ||||
| -rw-r--r-- | backends/graphics/openglsdl/openglsdl-graphics.cpp | 19 | 
3 files changed, 18 insertions, 14 deletions
diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp index 57c2378649..40ef17e477 100644 --- a/backends/graphics/opengl/opengl-graphics.cpp +++ b/backends/graphics/opengl/opengl-graphics.cpp @@ -1245,12 +1245,16 @@ void OpenGLGraphicsManager::toggleAntialiasing() {  	_transactionDetails.filterChanged = true;  } -uint OpenGLGraphicsManager::getAspectRatio() { +uint OpenGLGraphicsManager::getAspectRatio() const {  	// In case we enable aspect ratio correction we force a 4/3 ratio. +	// But just for 320x200 and 640x400 games, since other games do not need +	// this.  	// TODO: This makes OpenGL Normal behave like OpenGL Conserve, when aspect  	// ratio correction is enabled, but it's better than the previous 4/3 mode  	// mess at least... -	if (_videoMode.aspectRatioCorrection) +	if (_videoMode.aspectRatioCorrection +	    && ((_videoMode.screenWidth == 320 && _videoMode.screenHeight == 200) +	    || (_videoMode.screenWidth == 640 && _videoMode.screenHeight == 400)))  		return 13333;  	else if (_videoMode.mode == OpenGL::GFX_NORMAL)  		return _videoMode.hardwareWidth * 10000 / _videoMode.hardwareHeight; diff --git a/backends/graphics/opengl/opengl-graphics.h b/backends/graphics/opengl/opengl-graphics.h index 8a110b2d5f..42cfbacc85 100644 --- a/backends/graphics/opengl/opengl-graphics.h +++ b/backends/graphics/opengl/opengl-graphics.h @@ -214,10 +214,7 @@ protected:  	virtual void calculateDisplaySize(int &width, int &height);  	virtual void refreshDisplaySize(); -	/** -	 * Returns the current target aspect ratio x 10000 -	 */ -	virtual uint getAspectRatio(); +	uint getAspectRatio() const;  	bool _formatBGR; diff --git a/backends/graphics/openglsdl/openglsdl-graphics.cpp b/backends/graphics/openglsdl/openglsdl-graphics.cpp index d2810818e7..84515732fe 100644 --- a/backends/graphics/openglsdl/openglsdl-graphics.cpp +++ b/backends/graphics/openglsdl/openglsdl-graphics.cpp @@ -313,14 +313,17 @@ bool OpenGLSdlGraphicsManager::loadGFXMode() {  		_videoMode.overlayWidth = _videoMode.hardwareWidth = _videoMode.screenWidth * scaleFactor;  		_videoMode.overlayHeight = _videoMode.hardwareHeight = _videoMode.screenHeight * scaleFactor; -		int screenAspectRatio = _videoMode.screenWidth * 10000 / _videoMode.screenHeight; -		int desiredAspectRatio = getAspectRatio(); - -		// Do not downscale dimensions, only enlarge them if needed -		if (screenAspectRatio > desiredAspectRatio) -			_videoMode.hardwareHeight = (_videoMode.overlayWidth * 10000  + 5000) / desiredAspectRatio; -		else if (screenAspectRatio < desiredAspectRatio) -			_videoMode.hardwareWidth = (_videoMode.overlayHeight * desiredAspectRatio + 5000) / 10000; +		// The only modes where we need to adapt the aspect ratio are 320x200 +		// and 640x400. That is since our aspect ratio correction in fact is +		// only used to ensure that the original pixel size aspect for these +		// modes is used. +		// (Non-square pixels on old monitors vs square pixel on new ones). +		if (_videoMode.aspectRatioCorrection +		    && ((_videoMode.screenWidth == 320 && _videoMode.screenHeight == 200) +		    || (_videoMode.screenWidth == 640 && _videoMode.screenHeight == 400))) +			_videoMode.overlayHeight = _videoMode.hardwareHeight = 240 * scaleFactor; +		else +			_videoMode.overlayHeight = _videoMode.hardwareHeight = _videoMode.screenHeight * scaleFactor;  	}  	_screenResized = false;  | 
