From 449c4cb7116af5fedb0cdd222cdf81f47ec079d2 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sun, 23 Jul 2017 17:18:25 +0200 Subject: [PATCH] - Pixel stretch 320x200 and 640x400 scale modes in the GL renderer --- src/gl/renderer/gl_renderer.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/gl/renderer/gl_renderer.cpp b/src/gl/renderer/gl_renderer.cpp index 3e839ed4c..4951d4905 100644 --- a/src/gl/renderer/gl_renderer.cpp +++ b/src/gl/renderer/gl_renderer.cpp @@ -282,9 +282,19 @@ void FGLRenderer::SetOutputViewport(GL_IRECT *bounds) } int screenWidth = framebuffer->GetWidth(); int screenHeight = framebuffer->GetHeight(); - float scale = MIN(clientWidth / (float)screenWidth, clientHeight / (float)screenHeight); - mOutputLetterbox.width = (int)round(screenWidth * scale); - mOutputLetterbox.height = (int)round(screenHeight * scale); + float scaleX, scaleY; + if (vid_scalemode == 1 || vid_scalemode == 2) + { + scaleX = MIN(clientWidth / (float)screenWidth, clientHeight / (screenHeight * 1.2f)); + scaleY = scaleX * 1.2f; + } + else + { + scaleX = MIN(clientWidth / (float)screenWidth, clientHeight / (float)screenHeight); + scaleY = scaleX; + } + mOutputLetterbox.width = (int)round(screenWidth * scaleX); + mOutputLetterbox.height = (int)round(screenHeight * scaleY); mOutputLetterbox.left = (clientWidth - mOutputLetterbox.width) / 2; mOutputLetterbox.top = (clientHeight - mOutputLetterbox.height) / 2; @@ -305,10 +315,10 @@ void FGLRenderer::SetOutputViewport(GL_IRECT *bounds) { mScreenViewport.width = mOutputLetterbox.width; mScreenViewport.height = mOutputLetterbox.height; - mSceneViewport.left = (int)round(mSceneViewport.left * scale); - mSceneViewport.top = (int)round(mSceneViewport.top * scale); - mSceneViewport.width = (int)round(mSceneViewport.width * scale); - mSceneViewport.height = (int)round(mSceneViewport.height * scale); + mSceneViewport.left = (int)round(mSceneViewport.left * scaleX); + mSceneViewport.top = (int)round(mSceneViewport.top * scaleY); + mSceneViewport.width = (int)round(mSceneViewport.width * scaleX); + mSceneViewport.height = (int)round(mSceneViewport.height * scaleY); // Without render buffers we have to render directly to the letterbox if (!FGLRenderBuffers::IsEnabled())