From 5e15c14539947639f1c2e96b73b4c56cfc1b324f Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Thu, 4 Jun 2015 16:45:32 -0700 Subject: [PATCH] added sanitization for invalid line points data. Fixed bug where occasionally wrong view frustum would be sent to script" --- interface/src/Application.cpp | 7 +++++-- .../src/RenderableLineEntityItem.cpp | 5 ++++- libraries/entities/src/LineEntityItem.cpp | 13 ++++++++++++- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index e800fa5ff0..e3c5d735a8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3093,8 +3093,11 @@ PickRay Application::computePickRay(float x, float y) const { if (isHMDMode()) { getApplicationOverlay().computeHmdPickRay(glm::vec2(x, y), result.origin, result.direction); } else { - auto frustum = activeRenderingThread ? getDisplayViewFrustum() : getViewFrustum(); - frustum->computePickRay(x, y, result.origin, result.direction); + if (QThread::currentThread() == activeRenderingThread) { + getDisplayViewFrustum()->computePickRay(x, y, result.origin, result.direction); + } else { + getViewFrustum()->computePickRay(x, y, result.origin, result.direction); + } } return result; } diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 1951b2592b..22fef37ce3 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -44,7 +44,10 @@ void RenderableLineEntityItem::render(RenderArgs* args) { geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); _pointsChanged = false; } - geometryCache->renderVertices(gpu::LINE_STRIP, _lineVerticesID); + if (getLinePoints().size() > 1) { + geometryCache->renderVertices(gpu::LINE_STRIP, _lineVerticesID); + } + glPopMatrix(); RenderableDebugableEntityItem::render(this, args); diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index c43de8d076..0c6b73a7ce 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -85,7 +85,18 @@ bool LineEntityItem::setProperties(const EntityItemProperties& properties) { } void LineEntityItem::setLinePoints(const QVector& points) { - _points = points; + QVector sanitizedPoints; + for (int i = 0; i < points.size(); i++) { + glm::vec3 point = points.at(i); + // Make sure all of our points are valid numbers. + // Must be greater than 0 because vector component is set to 0 if it is invalid data + if (point.x > 0 && point.y > 0 && point.z > 0){ + sanitizedPoints << point; + } else { + qDebug() << "INVALID POINT"; + } + } + _points = sanitizedPoints; _pointsChanged = true; }