OPENGL: Fix aspect ratio correction behavior.

Now only 320x200 and 640x400 will result in aspect ratio correction to be used
if the user requested it. This should fix some strechting in Myst/Riven.
This commit is contained in:
Johannes Schickel 2011-08-12 04:06:54 +02:00
parent a77c29327e
commit b8dcd9a25e
3 changed files with 18 additions and 14 deletions

View file

@ -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;