diff options
| author | Pokechu22 <Pokechu022@gmail.com> | 2021-11-09 18:38:24 -0800 |
|---|---|---|
| committer | Pokechu22 <Pokechu022@gmail.com> | 2022-04-16 12:34:58 -0700 |
| commit | 925ceab82f874dcd9eeab5ca9520b5d6f0157ed1 (patch) | |
| tree | bf3996af9d6e6dc23c2fd91939c96f3ba53a73f6 /Source/Core/VideoBackends/Software/Clipper.cpp | |
| parent | 076392a0f65fa11b8c3475b762b8b9794057ae11 (diff) | |
Software: Use new scissor logic
Unlike the hardware backends, the software renderer can use multiple scissor rectangles (though this will result in extra rasterization).
Diffstat (limited to 'Source/Core/VideoBackends/Software/Clipper.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Software/Clipper.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/Source/Core/VideoBackends/Software/Clipper.cpp b/Source/Core/VideoBackends/Software/Clipper.cpp index f13ebb90b7..edae393350 100644 --- a/Source/Core/VideoBackends/Software/Clipper.cpp +++ b/Source/Core/VideoBackends/Software/Clipper.cpp @@ -307,7 +307,7 @@ void ProcessTriangle(OutputVertexData* v0, OutputVertexData* v1, OutputVertexDat PerspectiveDivide(v0); PerspectiveDivide(v1); PerspectiveDivide(v2); - Rasterizer::UpdateZSlope(v0, v1, v2); + Rasterizer::UpdateZSlope(v0, v1, v2, bpmem.scissorOffset.x * 2, bpmem.scissorOffset.y * 2); INCSTAT(g_stats.this_frame.num_triangles_culled) return; } @@ -320,7 +320,7 @@ void ProcessTriangle(OutputVertexData* v0, OutputVertexData* v1, OutputVertexDat PerspectiveDivide(v0); PerspectiveDivide(v2); PerspectiveDivide(v1); - Rasterizer::UpdateZSlope(v0, v2, v1); + Rasterizer::UpdateZSlope(v0, v2, v1, bpmem.scissorOffset.x * 2, bpmem.scissorOffset.y * 2); INCSTAT(g_stats.this_frame.num_triangles_culled) return; } @@ -533,10 +533,8 @@ void PerspectiveDivide(OutputVertexData* vertex) Vec3& screen = vertex->screenPosition; float wInverse = 1.0f / projected.w; - screen.x = - projected.x * wInverse * xfmem.viewport.wd + xfmem.viewport.xOrig - bpmem.scissorOffset.x * 2; - screen.y = - projected.y * wInverse * xfmem.viewport.ht + xfmem.viewport.yOrig - bpmem.scissorOffset.y * 2; + screen.x = projected.x * wInverse * xfmem.viewport.wd + xfmem.viewport.xOrig; + screen.y = projected.y * wInverse * xfmem.viewport.ht + xfmem.viewport.yOrig; screen.z = projected.z * wInverse * xfmem.viewport.zRange + xfmem.viewport.farZ; } } // namespace Clipper |
