From 101400809a3c72b2736fbb8d9be032f56ae35e46 Mon Sep 17 00:00:00 2001 From: ericrius1 Date: Tue, 23 Jun 2015 16:20:29 -0700 Subject: [PATCH] quads painting --- .../src/RenderableLineEntityItem.cpp | 2 +- .../src/RenderableQuadEntityItem.cpp | 6 ++-- libraries/entities/src/QuadEntityItem.cpp | 32 ++++++++++++++++--- libraries/entities/src/QuadEntityItem.h | 4 +++ 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 5c6f0b0d34..4b94992d59 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -39,7 +39,7 @@ void RenderableLineEntityItem::updateGeometry() { void RenderableLineEntityItem::render(RenderArgs* args) { PerformanceTimer perfTimer("RenderableLineEntityItem::render"); Q_ASSERT(getType() == EntityTypes::Line); - updateGeometry();  + updateGeometry(); Q_ASSERT(args->_batch); gpu::Batch& batch = *args->_batch; diff --git a/libraries/entities-renderer/src/RenderableQuadEntityItem.cpp b/libraries/entities-renderer/src/RenderableQuadEntityItem.cpp index 904b7a9d22..f5c853886c 100644 --- a/libraries/entities-renderer/src/RenderableQuadEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableQuadEntityItem.cpp @@ -31,7 +31,7 @@ void RenderableQuadEntityItem::updateGeometry() { } if (_pointsChanged) { glm::vec4 lineColor(toGlm(getXColor()), getLocalRenderAlpha()); - geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); + geometryCache->updateVertices(_lineVerticesID, getQuadVertices(), lineColor); _pointsChanged = false; } } @@ -48,9 +48,9 @@ void RenderableQuadEntityItem::render(RenderArgs* args) { batch.setModelTransform(transform); batch._glLineWidth(getLineWidth()); - if (getLinePoints().size() > 1) { + if (getLinePoints().size() > 3) { DependencyManager::get()->bindSimpleProgram(batch); - DependencyManager::get()->renderVertices(batch, gpu::LINE_STRIP, _lineVerticesID); + DependencyManager::get()->renderVertices(batch, gpu::QUAD_STRIP, _lineVerticesID); } batch._glLineWidth(1.0f); diff --git a/libraries/entities/src/QuadEntityItem.cpp b/libraries/entities/src/QuadEntityItem.cpp index 5b01ec8594..d2f9276bb4 100644 --- a/libraries/entities/src/QuadEntityItem.cpp +++ b/libraries/entities/src/QuadEntityItem.cpp @@ -22,7 +22,7 @@ -const float QuadEntityItem::DEFAULT_LINE_WIDTH = 2.0f; +const float QuadEntityItem::DEFAULT_LINE_WIDTH = 0.1f; const int QuadEntityItem::MAX_POINTS_PER_LINE = 70; @@ -35,7 +35,8 @@ QuadEntityItem::QuadEntityItem(const EntityItemID& entityItemID, const EntityIte EntityItem(entityItemID) , _lineWidth(DEFAULT_LINE_WIDTH), _pointsChanged(true), -_points(QVector(0)) +_points(QVector(0)), +_quadVertices(QVector(0)) { _type = EntityTypes::Quad; _created = properties.getCreated(); @@ -105,6 +106,20 @@ bool QuadEntityItem::setLinePoints(const QVector& points) { if (points.size() > MAX_POINTS_PER_LINE) { return false; } + //Check to see if points actually changed. If they haven't, return before doing anything else + if (points.size() == _points.size()) { + //same number of points, so now compare every point + for (int i = 0; i < points.size(); i++ ) { + if (points.at(i) != _points.at(i)){ + _pointsChanged = true; + break; + } + } + } + if (!_pointsChanged) { + return false; + } + for (int i = 0; i < points.size(); i++) { glm::vec3 point = points.at(i); glm::vec3 pos = getPosition(); @@ -115,9 +130,18 @@ bool QuadEntityItem::setLinePoints(const QVector& points) { } } - _points = points; - _pointsChanged = true; + //All our points are valid and at least one point has changed, now create quads from points + _quadVertices.clear(); + for (int i = 0; i < points.size(); i++) { + glm::vec3 point = points.at(i); + + glm::vec3 p1 = glm::vec3(point.x - _lineWidth, point.y - _lineWidth, point.z); + glm::vec3 p2 = glm::vec3(point.x + _lineWidth, point.y - _lineWidth, point.z); + glm::vec3 p3 = glm::vec3(point.x + _lineWidth, point.y + _lineWidth, point.z); + glm::vec3 p4 = glm::vec3(point.x - _lineWidth, point.y + _lineWidth, point.z); + _quadVertices << p1 << p2 << p3 << p4; + } return true; } diff --git a/libraries/entities/src/QuadEntityItem.h b/libraries/entities/src/QuadEntityItem.h index 2e52811463..045b297785 100644 --- a/libraries/entities/src/QuadEntityItem.h +++ b/libraries/entities/src/QuadEntityItem.h @@ -57,6 +57,9 @@ class QuadEntityItem : public EntityItem { bool setLinePoints(const QVector& points); bool appendPoint(const glm::vec3& point); + const QVector& getQuadVertices() const{ return _quadVertices; } + + const QVector& getLinePoints() const{ return _points; } virtual ShapeType getShapeType() const { return SHAPE_TYPE_LINE; } @@ -76,6 +79,7 @@ class QuadEntityItem : public EntityItem { float _lineWidth; bool _pointsChanged; QVector _points; + QVector _quadVertices; }; #endif // hifi_QuadEntityItem_h