diff options
| author | 2017-08-22 09:47:15 +0300 | |
|---|---|---|
| committer | 2017-08-25 07:26:45 +0300 | |
| commit | 417cb45e3fc20a7529ce5d548ba0fbc36ea0a621 (patch) | |
| tree | c919a7bdbb9dd3eab50a4ff969af8da84c917604 /src | |
| parent | gl_rasterizer: implement custom clip plane (diff) | |
| download | yuzu-417cb45e3fc20a7529ce5d548ba0fbc36ea0a621.tar.gz yuzu-417cb45e3fc20a7529ce5d548ba0fbc36ea0a621.tar.xz yuzu-417cb45e3fc20a7529ce5d548ba0fbc36ea0a621.zip | |
SwRasterizer/Clipper: flip the sign convention to match PICA and OpenGL
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/swrasterizer/clipper.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp index cc76ba555..a52129eb7 100644 --- a/src/video_core/swrasterizer/clipper.cpp +++ b/src/video_core/swrasterizer/clipper.cpp | |||
| @@ -31,7 +31,7 @@ public: | |||
| 31 | : coeffs(coeffs), bias(bias) {} | 31 | : coeffs(coeffs), bias(bias) {} |
| 32 | 32 | ||
| 33 | bool IsInside(const Vertex& vertex) const { | 33 | bool IsInside(const Vertex& vertex) const { |
| 34 | return Math::Dot(vertex.pos + bias, coeffs) <= float24::FromFloat32(0); | 34 | return Math::Dot(vertex.pos + bias, coeffs) >= float24::FromFloat32(0); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | bool IsOutSide(const Vertex& vertex) const { | 37 | bool IsOutSide(const Vertex& vertex) const { |
| @@ -116,13 +116,13 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu | |||
| 116 | static const float24 f0 = float24::FromFloat32(0.0); | 116 | static const float24 f0 = float24::FromFloat32(0.0); |
| 117 | static const float24 f1 = float24::FromFloat32(1.0); | 117 | static const float24 f1 = float24::FromFloat32(1.0); |
| 118 | static const std::array<ClippingEdge, 7> clipping_edges = {{ | 118 | static const std::array<ClippingEdge, 7> clipping_edges = {{ |
| 119 | {Math::MakeVec(f1, f0, f0, -f1)}, // x = +w | 119 | {Math::MakeVec(-f1, f0, f0, f1)}, // x = +w |
| 120 | {Math::MakeVec(-f1, f0, f0, -f1)}, // x = -w | 120 | {Math::MakeVec(f1, f0, f0, f1)}, // x = -w |
| 121 | {Math::MakeVec(f0, f1, f0, -f1)}, // y = +w | 121 | {Math::MakeVec(f0, -f1, f0, f1)}, // y = +w |
| 122 | {Math::MakeVec(f0, -f1, f0, -f1)}, // y = -w | 122 | {Math::MakeVec(f0, f1, f0, f1)}, // y = -w |
| 123 | {Math::MakeVec(f0, f0, f1, f0)}, // z = 0 | 123 | {Math::MakeVec(f0, f0, -f1, f0)}, // z = 0 |
| 124 | {Math::MakeVec(f0, f0, -f1, -f1)}, // z = -w | 124 | {Math::MakeVec(f0, f0, f1, f1)}, // z = -w |
| 125 | {Math::MakeVec(f0, f0, f0, -f1), Math::Vec4<float24>(f0, f0, f0, EPSILON)}, // w = EPSILON | 125 | {Math::MakeVec(f0, f0, f0, f1), Math::Vec4<float24>(f0, f0, f0, EPSILON)}, // w = EPSILON |
| 126 | }}; | 126 | }}; |
| 127 | 127 | ||
| 128 | // Simple implementation of the Sutherland-Hodgman clipping algorithm. | 128 | // Simple implementation of the Sutherland-Hodgman clipping algorithm. |
| @@ -157,7 +157,7 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu | |||
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | if (g_state.regs.rasterizer.clip_enable) { | 159 | if (g_state.regs.rasterizer.clip_enable) { |
| 160 | ClippingEdge custom_edge{-g_state.regs.rasterizer.GetClipCoef()}; | 160 | ClippingEdge custom_edge{g_state.regs.rasterizer.GetClipCoef()}; |
| 161 | Clip(custom_edge); | 161 | Clip(custom_edge); |
| 162 | 162 | ||
| 163 | if (output_list->size() < 3) | 163 | if (output_list->size() < 3) |