From 397d39e20cc0aa3b50f473b57a79603dbc2f65f2 Mon Sep 17 00:00:00 2001 From: Jasper van de Gronde Date: Tue, 6 Jan 2015 20:52:44 +0100 Subject: Rejection sampling to avoid indeterminate gradients in feTurbulence. (bzr r13844) --- src/display/nr-filter-turbulence.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/display/nr-filter-turbulence.cpp b/src/display/nr-filter-turbulence.cpp index a2a8c5756..19dedb67c 100644 --- a/src/display/nr-filter-turbulence.cpp +++ b/src/display/nr-filter-turbulence.cpp @@ -64,8 +64,10 @@ public: for (i = 0; i < BSize; ++i) { _latticeSelector[i] = i; - _gradient[i][k][0] = static_cast(_random() % (BSize*2) - BSize) / BSize; - _gradient[i][k][1] = static_cast(_random() % (BSize*2) - BSize) / BSize; + do { + _gradient[i][k][0] = static_cast(_random() % (BSize*2) - BSize) / BSize; + _gradient[i][k][1] = static_cast(_random() % (BSize*2) - BSize) / BSize; + } while(_gradient[i][k][0] == 0 && _gradient[i][k][1] == 0); // normalize gradient double s = hypot(_gradient[i][k][0], _gradient[i][k][1]); -- cgit v1.2.3