From ea09b4edb7d2c5149a23fa8709b6eea512ec715c Mon Sep 17 00:00:00 2001 From: omigamedev Date: Fri, 24 Aug 2018 15:53:05 +0200 Subject: [PATCH] fix black sample --- engine/brush.cpp | 4 ++++ engine/brush.h | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/engine/brush.cpp b/engine/brush.cpp index 5119d71..4f3f6ec 100644 --- a/engine/brush.cpp +++ b/engine/brush.cpp @@ -183,6 +183,8 @@ std::vector ui::Stroke::compute_samples() s.angle += curve_angle; } m_prev_sample = s; + if (!s.valid()) + LOG("Invalid sample"); samples.push_back(s); } return std::move(samples); @@ -215,6 +217,8 @@ void ui::Stroke::add_point(glm::vec2 pos, float pressure) m_keypoints.back().dist + glm::distance(m_keypoints.back().pos, pos); if (m_keypoints.empty()) m_prev_sample.origin = pos; + else if (m_keypoints.back().pos == pos) + return; // skip same point, leading to black samples (NaN values) Keypoint kp; kp.pos = pos; kp.pressure = pressure; diff --git a/engine/brush.h b/engine/brush.h index d849d4e..d1bb393 100644 --- a/engine/brush.h +++ b/engine/brush.h @@ -47,6 +47,14 @@ struct StrokeSample float size = 0; float flow = 0; float angle = 0; + bool valid() const + { + return !( + glm::any(glm::isnan(col)) || + glm::any(glm::isnan(pos)) || + glm::any(glm::isnan(origin)) + ); + } }; class BrushMesh