mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Round viewport coordinates when vertex rounding is enabled
This should fix https://bugs.dolphin-emu.org/issues/9105
This commit is contained in:
@ -4,6 +4,7 @@
|
||||
#include "VideoCommon/BPFunctions.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <string_view>
|
||||
|
||||
#include "Common/CommonTypes.h"
|
||||
@ -74,13 +75,26 @@ void SetScissor()
|
||||
|
||||
void SetViewport()
|
||||
{
|
||||
s32 xoff = bpmem.scissorOffset.x * 2;
|
||||
s32 yoff = bpmem.scissorOffset.y * 2;
|
||||
float x = g_renderer->EFBToScaledXf(xfmem.viewport.xOrig - xfmem.viewport.wd - xoff);
|
||||
float y = g_renderer->EFBToScaledYf(xfmem.viewport.yOrig + xfmem.viewport.ht - yoff);
|
||||
const s32 xoff = bpmem.scissorOffset.x * 2;
|
||||
const s32 yoff = bpmem.scissorOffset.y * 2;
|
||||
float raw_x = xfmem.viewport.xOrig - xfmem.viewport.wd - xoff;
|
||||
float raw_y = xfmem.viewport.yOrig + xfmem.viewport.ht - yoff;
|
||||
float raw_width = 2.0f * xfmem.viewport.wd;
|
||||
float raw_height = -2.0f * xfmem.viewport.ht;
|
||||
if (g_ActiveConfig.UseVertexRounding())
|
||||
{
|
||||
// Round the viewport to match full 1x IR pixels as well.
|
||||
// This eliminates a line in the archery mode in Wii Sports Resort at 3x IR and higher.
|
||||
raw_x = std::round(raw_x);
|
||||
raw_y = std::round(raw_y);
|
||||
raw_width = std::round(raw_width);
|
||||
raw_height = std::round(raw_height);
|
||||
}
|
||||
|
||||
float width = g_renderer->EFBToScaledXf(2.0f * xfmem.viewport.wd);
|
||||
float height = g_renderer->EFBToScaledYf(-2.0f * xfmem.viewport.ht);
|
||||
float x = g_renderer->EFBToScaledXf(raw_x);
|
||||
float y = g_renderer->EFBToScaledYf(raw_y);
|
||||
float width = g_renderer->EFBToScaledXf(raw_width);
|
||||
float height = g_renderer->EFBToScaledYf(raw_height);
|
||||
float min_depth = (xfmem.viewport.farZ - xfmem.viewport.zRange) / 16777216.0f;
|
||||
float max_depth = xfmem.viewport.farZ / 16777216.0f;
|
||||
if (width < 0.f)
|
||||
|
Reference in New Issue
Block a user