mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 05:40:01 -06:00
Normalize aspect ratio calculations to 4:3
Video Interface simply isn't aware about widescreen. Instead, the render class can multiply by 1.3333333 to get the 16:9 aspect ratio.
This commit is contained in:
@ -80,6 +80,7 @@ unsigned int Renderer::efb_scale_numeratorY = 1;
|
||||
unsigned int Renderer::efb_scale_denominatorX = 1;
|
||||
unsigned int Renderer::efb_scale_denominatorY = 1;
|
||||
|
||||
static float AspectToWidescreen(float aspect) { return aspect * ((16.0f / 9.0f) / (4.0f / 3.0f)); }
|
||||
|
||||
Renderer::Renderer()
|
||||
: frame_data()
|
||||
@ -431,7 +432,9 @@ void Renderer::UpdateDrawRectangle(int backbuffer_width, int backbuffer_height)
|
||||
// Don't know if there is a better place for this code so there isn't a 1 frame delay
|
||||
if (g_ActiveConfig.bWidescreenHack)
|
||||
{
|
||||
float source_aspect = VideoInterface::GetAspectRatio(Core::g_aspect_wide);
|
||||
float source_aspect = VideoInterface::GetAspectRatio();
|
||||
if (Core::g_aspect_wide)
|
||||
source_aspect = AspectToWidescreen(source_aspect);
|
||||
float target_aspect;
|
||||
|
||||
switch (g_ActiveConfig.iAspectRatio)
|
||||
@ -440,10 +443,10 @@ void Renderer::UpdateDrawRectangle(int backbuffer_width, int backbuffer_height)
|
||||
target_aspect = WinWidth / WinHeight;
|
||||
break;
|
||||
case ASPECT_ANALOG:
|
||||
target_aspect = VideoInterface::GetAspectRatio(false);
|
||||
target_aspect = VideoInterface::GetAspectRatio();
|
||||
break;
|
||||
case ASPECT_ANALOG_WIDE:
|
||||
target_aspect = VideoInterface::GetAspectRatio(true);
|
||||
target_aspect = AspectToWidescreen(VideoInterface::GetAspectRatio());
|
||||
break;
|
||||
default:
|
||||
// ASPECT_AUTO
|
||||
@ -476,17 +479,13 @@ void Renderer::UpdateDrawRectangle(int backbuffer_width, int backbuffer_height)
|
||||
|
||||
// The rendering window aspect ratio as a proportion of the 4:3 or 16:9 ratio
|
||||
float Ratio;
|
||||
switch (g_ActiveConfig.iAspectRatio)
|
||||
if (g_ActiveConfig.iAspectRatio == ASPECT_ANALOG_WIDE || (g_ActiveConfig.iAspectRatio != ASPECT_ANALOG && Core::g_aspect_wide))
|
||||
{
|
||||
case ASPECT_ANALOG_WIDE:
|
||||
Ratio = (WinWidth / WinHeight) / VideoInterface::GetAspectRatio(true);
|
||||
break;
|
||||
case ASPECT_ANALOG:
|
||||
Ratio = (WinWidth / WinHeight) / VideoInterface::GetAspectRatio(false);
|
||||
break;
|
||||
default:
|
||||
Ratio = (WinWidth / WinHeight) / VideoInterface::GetAspectRatio(Core::g_aspect_wide);
|
||||
break;
|
||||
Ratio = (WinWidth / WinHeight) / AspectToWidescreen(VideoInterface::GetAspectRatio());
|
||||
}
|
||||
else
|
||||
{
|
||||
Ratio = (WinWidth / WinHeight) / VideoInterface::GetAspectRatio();
|
||||
}
|
||||
|
||||
if (g_ActiveConfig.iAspectRatio != ASPECT_STRETCH)
|
||||
@ -512,18 +511,7 @@ void Renderer::UpdateDrawRectangle(int backbuffer_width, int backbuffer_height)
|
||||
// ------------------
|
||||
if (g_ActiveConfig.iAspectRatio != ASPECT_STRETCH && g_ActiveConfig.bCrop)
|
||||
{
|
||||
switch (g_ActiveConfig.iAspectRatio)
|
||||
{
|
||||
case ASPECT_ANALOG_WIDE:
|
||||
Ratio = (16.0f / 9.0f) / VideoInterface::GetAspectRatio(true);
|
||||
break;
|
||||
case ASPECT_ANALOG:
|
||||
Ratio = (4.0f / 3.0f) / VideoInterface::GetAspectRatio(false);
|
||||
break;
|
||||
default:
|
||||
Ratio = (!Core::g_aspect_wide ? (4.0f / 3.0f) : (16.0f / 9.0f)) / VideoInterface::GetAspectRatio(Core::g_aspect_wide);
|
||||
break;
|
||||
}
|
||||
Ratio = (4.0f / 3.0f) / VideoInterface::GetAspectRatio();
|
||||
if (Ratio <= 1.0f)
|
||||
{
|
||||
Ratio = 1.0f / Ratio;
|
||||
|
Reference in New Issue
Block a user