summaryrefslogtreecommitdiff
path: root/src/video_core/swrasterizer/clipper.cpp
diff options
context:
space:
mode:
authorGravatar Subv2017-06-11 11:55:35 -0500
committerGravatar wwylele2017-07-11 19:39:15 +0300
commit73566ff7a990cdfe8d8f023997b57942dc785fc4 (patch)
treeba42cbed66eeb4cd08012181f774a8633b9c2120 /src/video_core/swrasterizer/clipper.cpp
parentSwRasterizer: Corrected the light LUT lookups. (diff)
downloadyuzu-73566ff7a990cdfe8d8f023997b57942dc785fc4.tar.gz
yuzu-73566ff7a990cdfe8d8f023997b57942dc785fc4.tar.xz
yuzu-73566ff7a990cdfe8d8f023997b57942dc785fc4.zip
SwRasterizer: Flip the vertex quaternions before clipping (if necessary).
Diffstat (limited to 'src/video_core/swrasterizer/clipper.cpp')
-rw-r--r--src/video_core/swrasterizer/clipper.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp
index 6fb923756..7537689b7 100644
--- a/src/video_core/swrasterizer/clipper.cpp
+++ b/src/video_core/swrasterizer/clipper.cpp
@@ -95,6 +95,17 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu
95 static const size_t MAX_VERTICES = 9; 95 static const size_t MAX_VERTICES = 9;
96 static_vector<Vertex, MAX_VERTICES> buffer_a = {v0, v1, v2}; 96 static_vector<Vertex, MAX_VERTICES> buffer_a = {v0, v1, v2};
97 static_vector<Vertex, MAX_VERTICES> buffer_b; 97 static_vector<Vertex, MAX_VERTICES> buffer_b;
98
99 auto FlipQuaternionIfOpposite = [](auto& a, const auto& b) {
100 if (Math::Dot(a, b) < float24::Zero())
101 a = -a;
102 };
103
104 // Flip the quaternions if they are opposite to prevent interpolating them over the wrong
105 // direction.
106 FlipQuaternionIfOpposite(buffer_a[1].quat, buffer_a[0].quat);
107 FlipQuaternionIfOpposite(buffer_a[2].quat, buffer_a[0].quat);
108
98 auto* output_list = &buffer_a; 109 auto* output_list = &buffer_a;
99 auto* input_list = &buffer_b; 110 auto* input_list = &buffer_b;
100 111