From f1fc7a2a09b7f6ee82c6ed89610212d057d3d6af Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 26 May 2015 15:46:25 -0700 Subject: [PATCH 01/32] switching over to geometry cache method for rendering lines --- libraries/entities-renderer/src/RenderableLineEntityItem.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 14628d0a7a..5fc0cef7d2 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -30,11 +31,13 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glm::quat rotation = getRotation(); glm::vec4 lineColor(toGlm(getXColor()), getLocalRenderAlpha()); glPushMatrix(); + auto geometryCache = DependencyManager::get(); glTranslatef(position.x, position.y, position.z); glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); glm::vec3 p1 = {0.0f, 0.0f, 0.0f}; - glm::vec3& p2 = dimensions; + glm::vec3 p2 = {1.0f, 1.0, 0.0f}; + //Now we need to switch over to using gemoetryCache renderVertices method like in circleOverlay3D DependencyManager::get()->renderLine(p1, p2, lineColor, lineColor); glPopMatrix(); RenderableDebugableEntityItem::render(this, args); From 1f312b4e0200b4f5a2c38b1a605759d6778e06e0 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 26 May 2015 16:17:31 -0700 Subject: [PATCH 02/32] successfully using geometry cache! --- .../src/RenderableLineEntityItem.cpp | 19 +++++++++++++++---- .../src/RenderableLineEntityItem.h | 8 +++++++- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 5fc0cef7d2..40830d2215 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -32,13 +32,24 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glm::vec4 lineColor(toGlm(getXColor()), getLocalRenderAlpha()); glPushMatrix(); auto geometryCache = DependencyManager::get(); + + if(_lineVerticesID == GeometryCache::UNKNOWN_ID){ + _lineVerticesID = geometryCache ->allocateID(); + } glTranslatef(position.x, position.y, position.z); glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - glm::vec3 p1 = {0.0f, 0.0f, 0.0f}; - glm::vec3 p2 = {1.0f, 1.0, 0.0f}; - //Now we need to switch over to using gemoetryCache renderVertices method like in circleOverlay3D - DependencyManager::get()->renderLine(p1, p2, lineColor, lineColor); + + bool geometryChanged = true; + if(geometryChanged){ + QVector points; + glm::vec3 p1 = {0.0f, 0.0f, 0.0f}; + glm::vec3 p2 = {1.0f, 1.0, 0.0f}; + points << p1; + points << p2; + geometryCache->updateVertices(_lineVerticesID, points, lineColor); + } + geometryCache->renderVertices(gpu::LINES, _lineVerticesID); glPopMatrix(); RenderableDebugableEntityItem::render(this, args); }; diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.h b/libraries/entities-renderer/src/RenderableLineEntityItem.h index 0de7cd43ae..7e53915c05 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.h +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.h @@ -14,15 +14,21 @@ #include #include "RenderableDebugableEntityItem.h" +#include class RenderableLineEntityItem : public LineEntityItem { public: static EntityItem* factory(const EntityItemID& entityID, const EntityItemProperties& properties); RenderableLineEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : - LineEntityItem(entityItemID, properties) { } + LineEntityItem(entityItemID, properties), + _lineVerticesID(GeometryCache::UNKNOWN_ID) + { } virtual void render(RenderArgs* args); + +protected: + int _lineVerticesID; }; From dc4196df30553fb5c5aff01695388d73f08c96fa Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 26 May 2015 18:26:25 -0700 Subject: [PATCH 03/32] line entities --- libraries/entities/src/LineEntityItem.cpp | 11 ++++++++++- libraries/entities/src/LineEntityItem.h | 11 +++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 6686f9e46a..94e17b2ead 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -20,13 +20,16 @@ #include "EntityTreeElement.h" +const float DEFAULT_LINE_WIDTH = 2.0f; + EntityItem* LineEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { EntityItem* result = new LineEntityItem(entityID, properties); return result; } LineEntityItem::LineEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : - EntityItem(entityItemID) + EntityItem(entityItemID) , + _lineWidth(DEFAULT_LINE_WIDTH) { _type = EntityTypes::Line; _created = properties.getCreated(); @@ -36,9 +39,12 @@ LineEntityItem::LineEntityItem(const EntityItemID& entityItemID, const EntityIte EntityItemProperties LineEntityItem::getProperties() const { EntityItemProperties properties = EntityItem::getProperties(); // get the properties from our base class + COPY_ENTITY_PROPERTY_TO_PROPERTIES(lineWidth, getLineWidth); + properties._color = getXColor(); properties._colorChanged = false; + properties._glowLevel = getGlowLevel(); properties._glowLevelChanged = false; @@ -50,6 +56,7 @@ bool LineEntityItem::setProperties(const EntityItemProperties& properties) { somethingChanged = EntityItem::setProperties(properties); // set the properties in our base class SET_ENTITY_PROPERTY_FROM_PROPERTIES(color, setColor); +// SET_ENTITY_PROPERTY_FROM_PROPERTIES(lineWidth, setLineWidth); if (somethingChanged) { bool wantDebug = false; @@ -72,6 +79,7 @@ int LineEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, const unsigned char* dataAt = data; READ_ENTITY_PROPERTY(PROP_COLOR, rgbColor, setColor); + READ_ENTITY_PROPERTY(PROP_LINE_WIDTH, float, setLineWidth); return bytesRead; } @@ -95,6 +103,7 @@ void LineEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits bool successPropertyFits = true; APPEND_ENTITY_PROPERTY(PROP_COLOR, getColor()); + APPEND_ENTITY_PROPERTY(PROP_LINE_WIDTH, getLineWidth()); } void LineEntityItem::debugDump() const { diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index a8bc867bdd..cb21b4b76c 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -51,6 +51,15 @@ class LineEntityItem : public EntityItem { _color[BLUE_INDEX] = value.blue; } + void setLineWidth(float lineWidth){ + + _lineWidth = lineWidth; + } + float getLineWidth() const{ + + return _lineWidth; + } + virtual ShapeType getShapeType() const { return SHAPE_TYPE_LINE; } // never have a ray intersection pick a LineEntityItem. @@ -60,9 +69,11 @@ class LineEntityItem : public EntityItem { void** intersectedObject, bool precisionPicking) const { return false; } virtual void debugDump() const; + static const float DEFAULT_LINE_WIDTH; protected: rgbColor _color; + float _lineWidth; }; #endif // hifi_LineEntityItem_h From 811f5db419ca1c278b4e7f92c0382966d3243282 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 26 May 2015 18:36:24 -0700 Subject: [PATCH 04/32] fixed linker error in lineentityitem.cpp --- libraries/entities/src/EntityItemProperties.h | 1 + libraries/entities/src/EntityPropertyFlags.h | 2 ++ libraries/entities/src/LineEntityItem.cpp | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 2c052d0a53..673a52b172 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -141,6 +141,7 @@ public: DEFINE_PROPERTY_GROUP(Atmosphere, atmosphere, AtmospherePropertyGroup); DEFINE_PROPERTY_GROUP(Skybox, skybox, SkyboxPropertyGroup); DEFINE_PROPERTY_REF(PROP_SOURCE_URL, SourceUrl, sourceUrl, QString); + DEFINE_PROPERTY(LINE_WIDTH, LineWidth, lineWidth, float); static QString getBackgroundModeString(BackgroundMode mode); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 8a5d96e8d2..6572a94089 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -109,6 +109,8 @@ enum EntityPropertyList { PROP_COLLISION_SOUND_URL, PROP_RESTITUTION, PROP_FRICTION, + + PROP_LINE_WIDTH, //for lines //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties ABOVE this line diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 94e17b2ead..db0d3f807b 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -20,7 +20,7 @@ #include "EntityTreeElement.h" -const float DEFAULT_LINE_WIDTH = 2.0f; +const float LineEntityItem::DEFAULT_LINE_WIDTH = 2.0f; EntityItem* LineEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { EntityItem* result = new LineEntityItem(entityID, properties); From 4fb5f0796c4d63a4b6f435cc216e1865d9cb6a12 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 26 May 2015 18:40:15 -0700 Subject: [PATCH 05/32] added props for encoding and decoding --- libraries/entities/src/EntityItemProperties.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 905fa7d104..a3067c1ce5 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -741,6 +741,10 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem _staticSkybox.appentToEditPacket(packetData, requestedProperties, propertyFlags, propertiesDidntFit, propertyCount, appendState ); } + if(properties.getType() == EntityTypes::Line){ + APPEND_ENTITY_PROPERTY(PROP_LINE_WIDTH, properties.getLineWidth()); + } + APPEND_ENTITY_PROPERTY(PROP_MARKETPLACE_ID, properties.getMarketplaceID()); APPEND_ENTITY_PROPERTY(PROP_NAME, properties.getName()); APPEND_ENTITY_PROPERTY(PROP_COLLISION_SOUND_URL, properties.getCollisionSoundURL()); @@ -975,6 +979,10 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int properties.getSkybox().decodeFromEditPacket(propertyFlags, dataAt , processedBytes); } + if(properties.getType() == EntityTypes::Line) { + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_WIDTH, float, setLineWidth); + } + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_MARKETPLACE_ID, QString, setMarketplaceID); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_NAME, QString, setName); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_COLLISION_SOUND_URL, QString, setCollisionSoundURL); From 62539719df2d5e2bb104ec714dce5a2ba5596a66 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Wed, 27 May 2015 13:31:47 -0700 Subject: [PATCH 06/32] line width added as property to line entities --- libraries/entities-renderer/src/RenderableLineEntityItem.cpp | 4 +++- libraries/entities/src/EntityItemProperties.cpp | 5 +++++ libraries/entities/src/LineEntityItem.cpp | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 40830d2215..48c88f3894 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -31,6 +31,8 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glm::quat rotation = getRotation(); glm::vec4 lineColor(toGlm(getXColor()), getLocalRenderAlpha()); glPushMatrix(); + + glLineWidth(getLineWidth()); auto geometryCache = DependencyManager::get(); if(_lineVerticesID == GeometryCache::UNKNOWN_ID){ @@ -44,7 +46,7 @@ void RenderableLineEntityItem::render(RenderArgs* args) { if(geometryChanged){ QVector points; glm::vec3 p1 = {0.0f, 0.0f, 0.0f}; - glm::vec3 p2 = {1.0f, 1.0, 0.0f}; + glm::vec3 p2 = dimensions; points << p1; points << p2; geometryCache->updateVertices(_lineVerticesID, points, lineColor); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index a3067c1ce5..ae18611407 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -26,6 +26,7 @@ #include "ParticleEffectEntityItem.h" #include "TextEntityItem.h" #include "ZoneEntityItem.h" +#include "LineEntityItem.h" AtmospherePropertyGroup EntityItemProperties::_staticAtmosphere; SkyboxPropertyGroup EntityItemProperties::_staticSkybox; @@ -90,6 +91,7 @@ CONSTRUCT_PROPERTY(keyLightDirection, ZoneEntityItem::DEFAULT_KEYLIGHT_DIRECTION CONSTRUCT_PROPERTY(name, ENTITY_ITEM_DEFAULT_NAME), CONSTRUCT_PROPERTY(backgroundMode, BACKGROUND_MODE_INHERIT), CONSTRUCT_PROPERTY(sourceUrl, ""), +CONSTRUCT_PROPERTY(lineWidth, LineEntityItem::DEFAULT_LINE_WIDTH), _id(UNKNOWN_ENTITY_ID), _idSet(false), @@ -336,6 +338,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_KEYLIGHT_DIRECTION, keyLightDirection); CHECK_PROPERTY_CHANGE(PROP_BACKGROUND_MODE, backgroundMode); CHECK_PROPERTY_CHANGE(PROP_SOURCE_URL, sourceUrl); + CHECK_PROPERTY_CHANGE(PROP_LINE_WIDTH, lineWidth); changedProperties += _stage.getChangedProperties(); changedProperties += _atmosphere.getChangedProperties(); @@ -418,6 +421,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE(keyLightDirection); COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(backgroundMode, getBackgroundModeAsString()); COPY_PROPERTY_TO_QSCRIPTVALUE(sourceUrl); + COPY_PROPERTY_TO_QSCRIPTVALUE(lineWidth); // Sitting properties support if (!skipDefaults) { @@ -523,6 +527,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object) { COPY_PROPERTY_FROM_QSCRIPTVALUE(keyLightDirection, glmVec3, setKeyLightDirection); COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(backgroundMode, BackgroundMode); COPY_PROPERTY_FROM_QSCRIPTVALUE(sourceUrl, QString, setSourceUrl); + COPY_PROPERTY_FROM_QSCRIPTVALUE(lineWidth, float, setLineWidth); _stage.copyFromScriptValue(object, _defaultSettings); _atmosphere.copyFromScriptValue(object, _defaultSettings); diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index db0d3f807b..cfbc7d0a08 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -56,7 +56,7 @@ bool LineEntityItem::setProperties(const EntityItemProperties& properties) { somethingChanged = EntityItem::setProperties(properties); // set the properties in our base class SET_ENTITY_PROPERTY_FROM_PROPERTIES(color, setColor); -// SET_ENTITY_PROPERTY_FROM_PROPERTIES(lineWidth, setLineWidth); + SET_ENTITY_PROPERTY_FROM_PwaROPERTIES(lineWidth, setLineWidth); if (somethingChanged) { bool wantDebug = false; From 8edc883e4de4848eb499e6c1ce6e346832a99268 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Wed, 27 May 2015 13:47:47 -0700 Subject: [PATCH 07/32] adding serialization for Qvector --- libraries/entities/src/LineEntityItem.cpp | 2 +- libraries/octree/src/OctreePacketData.cpp | 5 +++++ libraries/octree/src/OctreePacketData.h | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index cfbc7d0a08..0c6ee0ba3a 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -56,7 +56,7 @@ bool LineEntityItem::setProperties(const EntityItemProperties& properties) { somethingChanged = EntityItem::setProperties(properties); // set the properties in our base class SET_ENTITY_PROPERTY_FROM_PROPERTIES(color, setColor); - SET_ENTITY_PROPERTY_FROM_PwaROPERTIES(lineWidth, setLineWidth); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(lineWidth, setLineWidth); if (somethingChanged) { bool wantDebug = false; diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 8bc27b872f..1854c73ec7 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -358,6 +358,7 @@ bool OctreePacketData::appendValue(quint64 value) { } bool OctreePacketData::appendValue(float value) { + const unsigned char* data = (const unsigned char*)&value; int length = sizeof(value); bool success = append(data, length); @@ -379,6 +380,10 @@ bool OctreePacketData::appendValue(const glm::vec3& value) { return success; } +bool OctreePacketData::appendValue(const QVector& value){ + +} + bool OctreePacketData::appendValue(const glm::quat& value) { const size_t VALUES_PER_QUAT = 4; const size_t PACKED_QUAT_SIZE = sizeof(uint16_t) * VALUES_PER_QUAT; diff --git a/libraries/octree/src/OctreePacketData.h b/libraries/octree/src/OctreePacketData.h index 28ea9aa681..feaac4196b 100644 --- a/libraries/octree/src/OctreePacketData.h +++ b/libraries/octree/src/OctreePacketData.h @@ -162,6 +162,9 @@ public: /// appends a non-position vector to the end of the stream, may fail if new data stream is too long to fit in packet bool appendValue(const glm::vec3& value); + + //appends a QVector of vec3's to the end of the stream, may fail if new data stream is too long to fit in packet + bool appendValue(const QVector& value); /// appends a packed quat to the end of the stream, may fail if new data stream is too long to fit in packet bool appendValue(const glm::quat& value); From 385c9be75f0bf23a8da9ed0887b4a49046be81db Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Wed, 27 May 2015 15:35:06 -0700 Subject: [PATCH 08/32] using vec of points --- .../src/RenderableLineEntityItem.cpp | 12 ++---------- libraries/entities/src/LineEntityItem.cpp | 8 +++++++- libraries/entities/src/LineEntityItem.h | 5 +++++ 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 48c88f3894..6fa71712c4 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -41,16 +41,8 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glTranslatef(position.x, position.y, position.z); glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - - bool geometryChanged = true; - if(geometryChanged){ - QVector points; - glm::vec3 p1 = {0.0f, 0.0f, 0.0f}; - glm::vec3 p2 = dimensions; - points << p1; - points << p2; - geometryCache->updateVertices(_lineVerticesID, points, lineColor); - } + geometryCache->updateVertices(_lineVerticesID, getPoints(), lineColor); + geometryCache->renderVertices(gpu::LINES, _lineVerticesID); glPopMatrix(); RenderableDebugableEntityItem::render(this, args); diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 0c6ee0ba3a..34fffba8fb 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -22,6 +22,7 @@ const float LineEntityItem::DEFAULT_LINE_WIDTH = 2.0f; + EntityItem* LineEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { EntityItem* result = new LineEntityItem(entityID, properties); return result; @@ -29,11 +30,16 @@ EntityItem* LineEntityItem::factory(const EntityItemID& entityID, const EntityIt LineEntityItem::LineEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : EntityItem(entityItemID) , - _lineWidth(DEFAULT_LINE_WIDTH) + _lineWidth(DEFAULT_LINE_WIDTH), + _points(QVector(100)) { _type = EntityTypes::Line; _created = properties.getCreated(); setProperties(properties); + glm::vec3 p1 = {0.0f, 0.0f, 0.0f}; + glm::vec3 p2 = {1.0f, 1.0f, 0.0f}; + _points << p1; + _points << p2; } EntityItemProperties LineEntityItem::getProperties() const { diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index cb21b4b76c..a42c0397c2 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -60,6 +60,10 @@ class LineEntityItem : public EntityItem { return _lineWidth; } + QVector getPoints() const{ + return _points; + } + virtual ShapeType getShapeType() const { return SHAPE_TYPE_LINE; } // never have a ray intersection pick a LineEntityItem. @@ -74,6 +78,7 @@ class LineEntityItem : public EntityItem { protected: rgbColor _color; float _lineWidth; + QVector _points; }; #endif // hifi_LineEntityItem_h From 72af4e4e674571d942b594246482ead81aa29b3c Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Thu, 28 May 2015 10:44:44 -0700 Subject: [PATCH 09/32] latest pointer --- .../src/RenderableLineEntityItem.cpp | 4 ++-- libraries/entities/src/EntityItemProperties.cpp | 8 ++++++++ libraries/entities/src/EntityItemProperties.h | 1 + .../entities/src/EntityItemPropertiesMacros.h | 7 +++++++ libraries/entities/src/EntityPropertyFlags.h | 5 +++-- libraries/entities/src/LineEntityItem.cpp | 15 +++++++++++---- libraries/entities/src/LineEntityItem.h | 8 +++++++- libraries/octree/src/OctreePacketData.cpp | 9 ++++++++- libraries/octree/src/OctreePacketData.h | 2 ++ libraries/render-utils/src/Model.h | 1 - libraries/shared/src/RegisteredMetaTypes.cpp | 10 ++++++++++ libraries/shared/src/RegisteredMetaTypes.h | 4 ++++ 12 files changed, 63 insertions(+), 11 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 6fa71712c4..3b3b204d93 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -38,10 +38,10 @@ void RenderableLineEntityItem::render(RenderArgs* args) { if(_lineVerticesID == GeometryCache::UNKNOWN_ID){ _lineVerticesID = geometryCache ->allocateID(); } - glTranslatef(position.x, position.y, position.z); +// glTranslatef(position.x, position.y, position.z); glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - geometryCache->updateVertices(_lineVerticesID, getPoints(), lineColor); + geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); geometryCache->renderVertices(gpu::LINES, _lineVerticesID); glPopMatrix(); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index ae18611407..4e4d4fd696 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -92,6 +92,7 @@ CONSTRUCT_PROPERTY(name, ENTITY_ITEM_DEFAULT_NAME), CONSTRUCT_PROPERTY(backgroundMode, BACKGROUND_MODE_INHERIT), CONSTRUCT_PROPERTY(sourceUrl, ""), CONSTRUCT_PROPERTY(lineWidth, LineEntityItem::DEFAULT_LINE_WIDTH), +CONSTRUCT_PROPERTY(linePoints, 0), _id(UNKNOWN_ENTITY_ID), _idSet(false), @@ -339,6 +340,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_BACKGROUND_MODE, backgroundMode); CHECK_PROPERTY_CHANGE(PROP_SOURCE_URL, sourceUrl); CHECK_PROPERTY_CHANGE(PROP_LINE_WIDTH, lineWidth); + CHECK_PROPERTY_CHANGE(PROP_LINE_POINTS, linePoints); changedProperties += _stage.getChangedProperties(); changedProperties += _atmosphere.getChangedProperties(); @@ -422,6 +424,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(backgroundMode, getBackgroundModeAsString()); COPY_PROPERTY_TO_QSCRIPTVALUE(sourceUrl); COPY_PROPERTY_TO_QSCRIPTVALUE(lineWidth); + COPY_PROPERTY_TO_QSCRIPTVALUE(linePoints); // Sitting properties support if (!skipDefaults) { @@ -528,6 +531,9 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object) { COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(backgroundMode, BackgroundMode); COPY_PROPERTY_FROM_QSCRIPTVALUE(sourceUrl, QString, setSourceUrl); COPY_PROPERTY_FROM_QSCRIPTVALUE(lineWidth, float, setLineWidth); + COPY_PROPERTY_FROM_QSCRIPTVALUE(linePoints, qVector, setLinePoints); + + _stage.copyFromScriptValue(object, _defaultSettings); _atmosphere.copyFromScriptValue(object, _defaultSettings); @@ -748,6 +754,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem if(properties.getType() == EntityTypes::Line){ APPEND_ENTITY_PROPERTY(PROP_LINE_WIDTH, properties.getLineWidth()); + APPEND_ENTITY_PROPERTY(PROP_LINE_POINTS, properties.getLinePoints()); } APPEND_ENTITY_PROPERTY(PROP_MARKETPLACE_ID, properties.getMarketplaceID()); @@ -986,6 +993,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int if(properties.getType() == EntityTypes::Line) { READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_WIDTH, float, setLineWidth); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_POINTS, QVector, setLinePoints); } READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_MARKETPLACE_ID, QString, setMarketplaceID); diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 673a52b172..ffc9763dca 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -142,6 +142,7 @@ public: DEFINE_PROPERTY_GROUP(Skybox, skybox, SkyboxPropertyGroup); DEFINE_PROPERTY_REF(PROP_SOURCE_URL, SourceUrl, sourceUrl, QString); DEFINE_PROPERTY(LINE_WIDTH, LineWidth, lineWidth, float); + DEFINE_PROPERTY_REF(LINE_POINTS, LinePoints, linePoints, QVector); static QString getBackgroundModeString(BackgroundMode mode); diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index 8c4f329cc9..dd55ae8b3e 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -94,6 +94,7 @@ inline QScriptValue convertScriptValue(QScriptEngine* e, const QString& v) { ret inline QScriptValue convertScriptValue(QScriptEngine* e, const xColor& v) { return xColorToScriptValue(e, v); } inline QScriptValue convertScriptValue(QScriptEngine* e, const glm::quat& v) { return quatToScriptValue(e, v); } inline QScriptValue convertScriptValue(QScriptEngine* e, const QScriptValue& v) { return v; } +inline QScriptValue convertScriptValue(QScriptEngine* e, const QVector& v) {return qVectorToScriptValue(e, v); } #define COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(G,g,P,p) \ if (!skipDefaults || defaultEntityProperties.get##G().get##P() != get##P()) { \ @@ -123,6 +124,7 @@ inline QScriptValue convertScriptValue(QScriptEngine* e, const QScriptValue& v) typedef glm::vec3 glmVec3; typedef glm::quat glmQuat; +typedef QVector qVector; inline float float_convertFromScriptValue(const QScriptValue& v, bool& isValid) { return v.toVariant().toFloat(&isValid); } inline uint16_t uint16_t_convertFromScriptValue(const QScriptValue& v, bool& isValid) { return v.toVariant().toInt(&isValid); } inline int int_convertFromScriptValue(const QScriptValue& v, bool& isValid) { return v.toVariant().toInt(&isValid); } @@ -149,6 +151,11 @@ inline glmVec3 glmVec3_convertFromScriptValue(const QScriptValue& v, bool& isVal return glm::vec3(0); } +inline qVector qVector_convertFromScriptValue(const QScriptValue& v, bool& isValid){ + isValid = true; + return qVectorFromScriptValue(v); +} + inline glmQuat glmQuat_convertFromScriptValue(const QScriptValue& v, bool& isValid) { isValid = false; /// assume it can't be converted QScriptValue x = v.property("x"); diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 6572a94089..5e52b95c9e 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -110,8 +110,9 @@ enum EntityPropertyList { PROP_RESTITUTION, PROP_FRICTION, - PROP_LINE_WIDTH, //for lines - + //for lines + PROP_LINE_WIDTH, + PROP_LINE_POINTS, //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties ABOVE this line PROP_AFTER_LAST_ITEM, diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 34fffba8fb..70e54d51a0 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -23,6 +23,7 @@ const float LineEntityItem::DEFAULT_LINE_WIDTH = 2.0f; + EntityItem* LineEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { EntityItem* result = new LineEntityItem(entityID, properties); return result; @@ -31,21 +32,22 @@ EntityItem* LineEntityItem::factory(const EntityItemID& entityID, const EntityIt LineEntityItem::LineEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : EntityItem(entityItemID) , _lineWidth(DEFAULT_LINE_WIDTH), - _points(QVector(100)) + _points(QVector(5)) { _type = EntityTypes::Line; _created = properties.getCreated(); - setProperties(properties); glm::vec3 p1 = {0.0f, 0.0f, 0.0f}; glm::vec3 p2 = {1.0f, 1.0f, 0.0f}; - _points << p1; - _points << p2; + setProperties(properties); + + } EntityItemProperties LineEntityItem::getProperties() const { EntityItemProperties properties = EntityItem::getProperties(); // get the properties from our base class COPY_ENTITY_PROPERTY_TO_PROPERTIES(lineWidth, getLineWidth); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(linePoints, getLinePoints); properties._color = getXColor(); properties._colorChanged = false; @@ -63,6 +65,9 @@ bool LineEntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(color, setColor); SET_ENTITY_PROPERTY_FROM_PROPERTIES(lineWidth, setLineWidth); + qDebug()<<"LINE POINTS" << properties._linePoints.size(); + + SET_ENTITY_PROPERTY_FROM_PROPERTIES(linePoints, setLinePoints); if (somethingChanged) { bool wantDebug = false; @@ -86,6 +91,8 @@ int LineEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, READ_ENTITY_PROPERTY(PROP_COLOR, rgbColor, setColor); READ_ENTITY_PROPERTY(PROP_LINE_WIDTH, float, setLineWidth); + READ_ENTITY_PROPERTY(PROP_LINE_POINTS, QVector, setLinePoints); + return bytesRead; } diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index a42c0397c2..8d84e4b0d8 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -60,7 +60,13 @@ class LineEntityItem : public EntityItem { return _lineWidth; } - QVector getPoints() const{ + + void setLinePoints(const QVector& points){ + qDebug()<<"WE ARE SETTTTING POINTS *******************"; + _points = points; + } + + const QVector& getLinePoints() const{ return _points; } diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 1854c73ec7..4f7d89492b 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -381,7 +381,14 @@ bool OctreePacketData::appendValue(const glm::vec3& value) { } bool OctreePacketData::appendValue(const QVector& value){ - + const unsigned char* data = (const unsigned char*)&value; + int length = sizeof(value); + bool success = append(data, length); + if (success){ + _bytesOfValues += length; + _totalBytesOfValues += length; + } + return success; } bool OctreePacketData::appendValue(const glm::quat& value) { diff --git a/libraries/octree/src/OctreePacketData.h b/libraries/octree/src/OctreePacketData.h index feaac4196b..23ffcf99a5 100644 --- a/libraries/octree/src/OctreePacketData.h +++ b/libraries/octree/src/OctreePacketData.h @@ -231,6 +231,7 @@ public: static int uppackDataFromBytes(const unsigned char* dataBytes, float& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } static int uppackDataFromBytes(const unsigned char* dataBytes, glm::vec3& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } + static int uppackDataFromBytes(const unsigned char* dataBytes, QVector& result) {memcpy(&result, dataBytes, sizeof(result)); return sizeof(result);} static int uppackDataFromBytes(const unsigned char* dataBytes, bool& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } static int uppackDataFromBytes(const unsigned char* dataBytes, quint64& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } static int uppackDataFromBytes(const unsigned char* dataBytes, uint32_t& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } @@ -244,6 +245,7 @@ public: static int uppackDataFromBytes(const unsigned char* dataBytes, QUuid& result); static int uppackDataFromBytes(const unsigned char* dataBytes, xColor& result); + private: /// appends raw bytes, might fail if byte would cause packet to be too large bool append(const unsigned char* data, int length); diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 8c8c35fb4a..76a2d0855f 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -515,7 +515,6 @@ private: Q_DECLARE_METATYPE(QPointer) Q_DECLARE_METATYPE(QWeakPointer) -Q_DECLARE_METATYPE(QVector) /// Handle management of pending models that need blending class ModelBlender : public QObject, public Dependency { diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index eb60e1c31d..242dc0970a 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -72,6 +72,16 @@ void vec3FromScriptValue(const QScriptValue &object, glm::vec3 &vec3) { vec3.z = object.property("z").toVariant().toFloat(); } +QScriptValue qVectorToScriptValue(QScriptEngine* engine, const QVector &vector){ + QScriptValue array = engine->newArray(); + return array; +} + +QVector qVectorFromScriptValue(const QScriptValue &array){ + qDebug()<<"Point 2 x"<(7); +} + QScriptValue vec2toScriptValue(QScriptEngine* engine, const glm::vec2 &vec2) { QScriptValue obj = engine->newObject(); obj.setProperty("x", vec2.x); diff --git a/libraries/shared/src/RegisteredMetaTypes.h b/libraries/shared/src/RegisteredMetaTypes.h index 14f30c20fc..41bfb2004a 100644 --- a/libraries/shared/src/RegisteredMetaTypes.h +++ b/libraries/shared/src/RegisteredMetaTypes.h @@ -28,6 +28,7 @@ Q_DECLARE_METATYPE(glm::vec3) Q_DECLARE_METATYPE(glm::vec2) Q_DECLARE_METATYPE(glm::quat) Q_DECLARE_METATYPE(xColor) +Q_DECLARE_METATYPE(QVector) void registerMetaTypes(QScriptEngine* engine); @@ -55,6 +56,9 @@ void qColorFromScriptValue(const QScriptValue& object, QColor& color); QScriptValue qURLToScriptValue(QScriptEngine* engine, const QUrl& url); void qURLFromScriptValue(const QScriptValue& object, QUrl& url); +QScriptValue qVectorToScriptValue(QScriptEngine*, const QVector& vector); +QVector qVectorFromScriptValue( const QScriptValue &array); + class PickRay { public: PickRay() : origin(0.0f), direction(0.0f) { } From 8886e93d5fa764f983c3495e6431d012f56fce6e Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Thu, 28 May 2015 11:26:41 -0700 Subject: [PATCH 10/32] changed qVector to qVectorVec3 --- libraries/entities/src/EntityItemProperties.cpp | 2 +- libraries/entities/src/EntityItemPropertiesMacros.h | 8 ++++---- libraries/shared/src/RegisteredMetaTypes.cpp | 10 +++++++--- libraries/shared/src/RegisteredMetaTypes.h | 4 ++-- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 4e4d4fd696..dada7ff1ea 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -531,7 +531,7 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object) { COPY_PROPERTY_FROM_QSCRITPTVALUE_ENUM(backgroundMode, BackgroundMode); COPY_PROPERTY_FROM_QSCRIPTVALUE(sourceUrl, QString, setSourceUrl); COPY_PROPERTY_FROM_QSCRIPTVALUE(lineWidth, float, setLineWidth); - COPY_PROPERTY_FROM_QSCRIPTVALUE(linePoints, qVector, setLinePoints); + COPY_PROPERTY_FROM_QSCRIPTVALUE(linePoints, qVectorVec3, setLinePoints); diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index dd55ae8b3e..3c087b9891 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -94,7 +94,7 @@ inline QScriptValue convertScriptValue(QScriptEngine* e, const QString& v) { ret inline QScriptValue convertScriptValue(QScriptEngine* e, const xColor& v) { return xColorToScriptValue(e, v); } inline QScriptValue convertScriptValue(QScriptEngine* e, const glm::quat& v) { return quatToScriptValue(e, v); } inline QScriptValue convertScriptValue(QScriptEngine* e, const QScriptValue& v) { return v; } -inline QScriptValue convertScriptValue(QScriptEngine* e, const QVector& v) {return qVectorToScriptValue(e, v); } +inline QScriptValue convertScriptValue(QScriptEngine* e, const QVector& v) {return qVectorVec3ToScriptValue(e, v); } #define COPY_GROUP_PROPERTY_TO_QSCRIPTVALUE(G,g,P,p) \ if (!skipDefaults || defaultEntityProperties.get##G().get##P() != get##P()) { \ @@ -124,7 +124,7 @@ inline QScriptValue convertScriptValue(QScriptEngine* e, const QVector qVector; +typedef QVector qVectorVec3; inline float float_convertFromScriptValue(const QScriptValue& v, bool& isValid) { return v.toVariant().toFloat(&isValid); } inline uint16_t uint16_t_convertFromScriptValue(const QScriptValue& v, bool& isValid) { return v.toVariant().toInt(&isValid); } inline int int_convertFromScriptValue(const QScriptValue& v, bool& isValid) { return v.toVariant().toInt(&isValid); } @@ -151,9 +151,9 @@ inline glmVec3 glmVec3_convertFromScriptValue(const QScriptValue& v, bool& isVal return glm::vec3(0); } -inline qVector qVector_convertFromScriptValue(const QScriptValue& v, bool& isValid){ +inline qVectorVec3 qVectorVec3_convertFromScriptValue(const QScriptValue& v, bool& isValid){ isValid = true; - return qVectorFromScriptValue(v); + return qVectorVec3FromScriptValue(v); } inline glmQuat glmQuat_convertFromScriptValue(const QScriptValue& v, bool& isValid) { diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index 242dc0970a..7b7a15416a 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -72,14 +72,18 @@ void vec3FromScriptValue(const QScriptValue &object, glm::vec3 &vec3) { vec3.z = object.property("z").toVariant().toFloat(); } -QScriptValue qVectorToScriptValue(QScriptEngine* engine, const QVector &vector){ +QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector &vector){ QScriptValue array = engine->newArray(); + for(int i = 0; i < vector.size(); i++){ + array.setProperty(i, vec3toScriptValue(vector.at(i))); + } return array; } -QVector qVectorFromScriptValue(const QScriptValue &array){ +QVector qVectorVec3FromScriptValue(const QScriptValue &array){ + QVector newVector; qDebug()<<"Point 2 x"<(7); + return QVector(8); } QScriptValue vec2toScriptValue(QScriptEngine* engine, const glm::vec2 &vec2) { diff --git a/libraries/shared/src/RegisteredMetaTypes.h b/libraries/shared/src/RegisteredMetaTypes.h index 41bfb2004a..bab4dc7d08 100644 --- a/libraries/shared/src/RegisteredMetaTypes.h +++ b/libraries/shared/src/RegisteredMetaTypes.h @@ -56,8 +56,8 @@ void qColorFromScriptValue(const QScriptValue& object, QColor& color); QScriptValue qURLToScriptValue(QScriptEngine* engine, const QUrl& url); void qURLFromScriptValue(const QScriptValue& object, QUrl& url); -QScriptValue qVectorToScriptValue(QScriptEngine*, const QVector& vector); -QVector qVectorFromScriptValue( const QScriptValue &array); +QScriptValue qVectorVec3ToScriptValue(QScriptEngine*, const QVector& vector); +QVector qVectorVec3FromScriptValue( const QScriptValue &array); class PickRay { public: From 2d6669667507a7e3785ed2c77540440ec3e7494c Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Thu, 28 May 2015 14:18:57 -0700 Subject: [PATCH 11/32] line working from array of points --- .../src/RenderableLineEntityItem.cpp | 1 + libraries/entities/src/LineEntityItem.cpp | 7 ++----- libraries/entities/src/LineEntityItem.h | 7 ++++++- libraries/shared/src/RegisteredMetaTypes.cpp | 14 ++++++++++---- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 3b3b204d93..b2ada00f1f 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -24,6 +24,7 @@ EntityItem* RenderableLineEntityItem::factory(const EntityItemID& entityID, cons } void RenderableLineEntityItem::render(RenderArgs* args) { + qDebug()<<"RENDER"; PerformanceTimer perfTimer("RenderableLineEntityItem::render"); assert(getType() == EntityTypes::Line); glm::vec3 position = getPosition(); diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 70e54d51a0..8cf588c2b0 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -32,12 +32,10 @@ EntityItem* LineEntityItem::factory(const EntityItemID& entityID, const EntityIt LineEntityItem::LineEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : EntityItem(entityItemID) , _lineWidth(DEFAULT_LINE_WIDTH), - _points(QVector(5)) + _points(QVector(0)) { _type = EntityTypes::Line; _created = properties.getCreated(); - glm::vec3 p1 = {0.0f, 0.0f, 0.0f}; - glm::vec3 p2 = {1.0f, 1.0f, 0.0f}; setProperties(properties); @@ -65,10 +63,9 @@ bool LineEntityItem::setProperties(const EntityItemProperties& properties) { SET_ENTITY_PROPERTY_FROM_PROPERTIES(color, setColor); SET_ENTITY_PROPERTY_FROM_PROPERTIES(lineWidth, setLineWidth); - qDebug()<<"LINE POINTS" << properties._linePoints.size(); - SET_ENTITY_PROPERTY_FROM_PROPERTIES(linePoints, setLinePoints); + if (somethingChanged) { bool wantDebug = false; if (wantDebug) { diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index 8d84e4b0d8..9ac3fd5ae5 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -62,8 +62,13 @@ class LineEntityItem : public EntityItem { void setLinePoints(const QVector& points){ - qDebug()<<"WE ARE SETTTTING POINTS *******************"; + qDebug()<<"points " << points; _points = points; +// _points = QVector(0); +// glm::vec3 p1 = { 0,0,0}; +// glm::vec3 p2 = {1, 1,0}; +// _points <& getLinePoints() const{ diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index 7b7a15416a..cce628aea5 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -75,15 +75,21 @@ void vec3FromScriptValue(const QScriptValue &object, glm::vec3 &vec3) { QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector &vector){ QScriptValue array = engine->newArray(); for(int i = 0; i < vector.size(); i++){ - array.setProperty(i, vec3toScriptValue(vector.at(i))); + array.setProperty(i, vec3toScriptValue(engine, vector.at(i))); } return array; } QVector qVectorVec3FromScriptValue(const QScriptValue &array){ - QVector newVector; - qDebug()<<"Point 2 x"<(8); + QVector newVector(0); + int length = array.property("length").toInteger(); + + for(int i = 0; i < length; i++) { + glm::vec3 newVec3 = glm::vec3(); + vec3FromScriptValue(array.property(i), newVec3); + newVector << newVec3; + } + return newVector; } QScriptValue vec2toScriptValue(QScriptEngine* engine, const glm::vec2 &vec2) { From 4d4a90e9ce0da73ea8a50bf084d6414cda38c4ca Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Thu, 28 May 2015 14:30:34 -0700 Subject: [PATCH 12/32] removed render debugging --- libraries/entities-renderer/src/RenderableLineEntityItem.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index b2ada00f1f..3b3b204d93 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -24,7 +24,6 @@ EntityItem* RenderableLineEntityItem::factory(const EntityItemID& entityID, cons } void RenderableLineEntityItem::render(RenderArgs* args) { - qDebug()<<"RENDER"; PerformanceTimer perfTimer("RenderableLineEntityItem::render"); assert(getType() == EntityTypes::Line); glm::vec3 position = getPosition(); From 533148f26dda5db4e6a4233e0361b3a1436fc9dd Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Thu, 28 May 2015 15:48:31 -0700 Subject: [PATCH 13/32] line being sent as array --- libraries/entities-renderer/src/RenderableLineEntityItem.cpp | 2 +- libraries/entities/src/LineEntityItem.h | 4 +++- libraries/render-utils/src/GeometryCache.cpp | 3 +-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 3b3b204d93..21880bab9b 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -43,7 +43,7 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); - geometryCache->renderVertices(gpu::LINES, _lineVerticesID); + geometryCache->renderVertices(gpu::LINE_STRIP, _lineVerticesID); glPopMatrix(); RenderableDebugableEntityItem::render(this, args); }; diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index 9ac3fd5ae5..50858b4b0a 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -66,9 +66,11 @@ class LineEntityItem : public EntityItem { _points = points; // _points = QVector(0); // glm::vec3 p1 = { 0,0,0}; -// glm::vec3 p2 = {1, 1,0}; +// glm::vec3 p2 = {1, -1,2}; +// glm::vec3 p3 = {4, 0, 0}; // _points <& getLinePoints() const{ diff --git a/libraries/render-utils/src/GeometryCache.cpp b/libraries/render-utils/src/GeometryCache.cpp index 770717edbe..132ebbc914 100644 --- a/libraries/render-utils/src/GeometryCache.cpp +++ b/libraries/render-utils/src/GeometryCache.cpp @@ -660,7 +660,6 @@ void GeometryCache::updateVertices(int id, const QVector& points, con void GeometryCache::updateVertices(int id, const QVector& points, const glm::vec4& color) { BatchItemDetails& details = _registeredVertices[id]; - if (details.isCreated) { details.clear(); #ifdef WANT_DEBUG @@ -799,7 +798,7 @@ void GeometryCache::renderVertices(gpu::Primitive primitiveType, int id) { batch.setInputFormat(details.streamFormat); batch.setInputStream(0, *details.stream); batch.draw(primitiveType, details.vertices, 0); - + gpu::GLBackend::renderBatch(batch); glDisableClientState(GL_VERTEX_ARRAY); From 3627f03c0d2ffaa4acb9de73b494a6aa2d54c1ee Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Thu, 28 May 2015 16:00:24 -0700 Subject: [PATCH 14/32] drawing lines relative to position --- libraries/entities-renderer/src/RenderableLineEntityItem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 21880bab9b..9688d2bab1 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -38,7 +38,7 @@ void RenderableLineEntityItem::render(RenderArgs* args) { if(_lineVerticesID == GeometryCache::UNKNOWN_ID){ _lineVerticesID = geometryCache ->allocateID(); } -// glTranslatef(position.x, position.y, position.z); + glTranslatef(position.x, position.y, position.z); glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); From f5736452916b194c6d14836e60ce8432897f1bd4 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Fri, 29 May 2015 09:24:00 -0700 Subject: [PATCH 15/32] line entity width translating --- .../entities-renderer/src/RenderableLineEntityItem.cpp | 7 ++++++- libraries/entities/src/EntityItemProperties.cpp | 9 +++++++-- libraries/entities/src/EntityItemProperties.h | 2 +- libraries/entities/src/LineEntityItem.cpp | 10 +++++++--- libraries/entities/src/LineEntityItem.h | 1 - 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 9688d2bab1..63cd7f0234 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -41,7 +41,12 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glTranslatef(position.x, position.y, position.z); glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); + QVector points; + glm::vec3 p1 = {0, 0, 0}; + glm::vec3 p2 = {1, 1, 0}; + points<updateVertices(_lineVerticesID, getLinePoints(), lineColor); + geometryCache->updateVertices(_lineVerticesID, points, lineColor); geometryCache->renderVertices(gpu::LINE_STRIP, _lineVerticesID); glPopMatrix(); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index dada7ff1ea..4a747aeea3 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -753,8 +753,9 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem } if(properties.getType() == EntityTypes::Line){ + qDebug()<<"****** LINE WIDTH!!!!!!!!!!!!!!! **********" << properties.getLineWidth(); APPEND_ENTITY_PROPERTY(PROP_LINE_WIDTH, properties.getLineWidth()); - APPEND_ENTITY_PROPERTY(PROP_LINE_POINTS, properties.getLinePoints()); +// APPEND_ENTITY_PROPERTY(PROP_LINE_POINTS, properties.getLinePoints()); } APPEND_ENTITY_PROPERTY(PROP_MARKETPLACE_ID, properties.getMarketplaceID()); @@ -992,8 +993,10 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int } if(properties.getType() == EntityTypes::Line) { + qDebug()<<"READING LINE ENTITY"; READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_WIDTH, float, setLineWidth); - READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_POINTS, QVector, setLinePoints); + qDebug()<<"width: "<< properties._lineWidth; +// READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_POINTS, QVector, setLinePoints); } READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_MARKETPLACE_ID, QString, setMarketplaceID); @@ -1100,6 +1103,8 @@ void EntityItemProperties::markAllChanged() { _skybox.markAllChanged(); _sourceUrlChanged = true; + + _lineWidthChanged = true; } /// The maximum bounding cube for the entity, independent of it's rotation. diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index ffc9763dca..403cff12d3 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -141,7 +141,7 @@ public: DEFINE_PROPERTY_GROUP(Atmosphere, atmosphere, AtmospherePropertyGroup); DEFINE_PROPERTY_GROUP(Skybox, skybox, SkyboxPropertyGroup); DEFINE_PROPERTY_REF(PROP_SOURCE_URL, SourceUrl, sourceUrl, QString); - DEFINE_PROPERTY(LINE_WIDTH, LineWidth, lineWidth, float); + DEFINE_PROPERTY(PROP_LINE_WIDTH, LineWidth, lineWidth, float); DEFINE_PROPERTY_REF(LINE_POINTS, LinePoints, linePoints, QVector); static QString getBackgroundModeString(BackgroundMode mode); diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 8cf588c2b0..5806ca4c57 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -42,13 +42,16 @@ LineEntityItem::LineEntityItem(const EntityItemID& entityItemID, const EntityIte } EntityItemProperties LineEntityItem::getProperties() const { + EntityItemProperties properties = EntityItem::getProperties(); // get the properties from our base class - COPY_ENTITY_PROPERTY_TO_PROPERTIES(lineWidth, getLineWidth); COPY_ENTITY_PROPERTY_TO_PROPERTIES(linePoints, getLinePoints); properties._color = getXColor(); properties._colorChanged = false; + + properties._lineWidth = getLineWidth(); + properties._lineWidthChanged = false; properties._glowLevel = getGlowLevel(); @@ -60,7 +63,7 @@ EntityItemProperties LineEntityItem::getProperties() const { bool LineEntityItem::setProperties(const EntityItemProperties& properties) { bool somethingChanged = false; somethingChanged = EntityItem::setProperties(properties); // set the properties in our base class - + SET_ENTITY_PROPERTY_FROM_PROPERTIES(color, setColor); SET_ENTITY_PROPERTY_FROM_PROPERTIES(lineWidth, setLineWidth); SET_ENTITY_PROPERTY_FROM_PROPERTIES(linePoints, setLinePoints); @@ -88,7 +91,7 @@ int LineEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, READ_ENTITY_PROPERTY(PROP_COLOR, rgbColor, setColor); READ_ENTITY_PROPERTY(PROP_LINE_WIDTH, float, setLineWidth); - READ_ENTITY_PROPERTY(PROP_LINE_POINTS, QVector, setLinePoints); +// READ_ENTITY_PROPERTY(PROP_LINE_POINTS, QVector, setLinePoints); return bytesRead; @@ -99,6 +102,7 @@ int LineEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, EntityPropertyFlags LineEntityItem::getEntityProperties(EncodeBitstreamParams& params) const { EntityPropertyFlags requestedProperties = EntityItem::getEntityProperties(params); requestedProperties += PROP_COLOR; + requestedProperties += PROP_LINE_WIDTH; return requestedProperties; } diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index 50858b4b0a..afd20a3722 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -52,7 +52,6 @@ class LineEntityItem : public EntityItem { } void setLineWidth(float lineWidth){ - _lineWidth = lineWidth; } float getLineWidth() const{ From 7d5dd278a19c36d57a819dbb953b8d186a349f4b Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Fri, 29 May 2015 16:54:40 -0700 Subject: [PATCH 16/32] adding unpacking --- .../src/RenderableLineEntityItem.cpp | 4 +-- .../entities/src/EntityItemProperties.cpp | 8 ++--- libraries/entities/src/LineEntityItem.cpp | 7 +++-- libraries/octree/src/OctreePacketData.cpp | 29 ++++++++++++++++--- libraries/octree/src/OctreePacketData.h | 6 ++-- 5 files changed, 38 insertions(+), 16 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 63cd7f0234..f5e84a6bfa 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -45,8 +45,8 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glm::vec3 p1 = {0, 0, 0}; glm::vec3 p2 = {1, 1, 0}; points<updateVertices(_lineVerticesID, getLinePoints(), lineColor); - geometryCache->updateVertices(_lineVerticesID, points, lineColor); + geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); +// geometryCache->updateVertices(_lineVerticesID, points, lineColor); geometryCache->renderVertices(gpu::LINE_STRIP, _lineVerticesID); glPopMatrix(); diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 4a747aeea3..e0b200cdd8 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -753,9 +753,8 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem } if(properties.getType() == EntityTypes::Line){ - qDebug()<<"****** LINE WIDTH!!!!!!!!!!!!!!! **********" << properties.getLineWidth(); APPEND_ENTITY_PROPERTY(PROP_LINE_WIDTH, properties.getLineWidth()); -// APPEND_ENTITY_PROPERTY(PROP_LINE_POINTS, properties.getLinePoints()); + APPEND_ENTITY_PROPERTY(PROP_LINE_POINTS, properties.getLinePoints()); } APPEND_ENTITY_PROPERTY(PROP_MARKETPLACE_ID, properties.getMarketplaceID()); @@ -993,10 +992,8 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int } if(properties.getType() == EntityTypes::Line) { - qDebug()<<"READING LINE ENTITY"; READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_WIDTH, float, setLineWidth); - qDebug()<<"width: "<< properties._lineWidth; -// READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_POINTS, QVector, setLinePoints); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_POINTS, QVector, setLinePoints); } READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_MARKETPLACE_ID, QString, setMarketplaceID); @@ -1105,6 +1102,7 @@ void EntityItemProperties::markAllChanged() { _sourceUrlChanged = true; _lineWidthChanged = true; + _linePointsChanged = true; } /// The maximum bounding cube for the entity, independent of it's rotation. diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 5806ca4c57..167b64bde2 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -45,13 +45,14 @@ EntityItemProperties LineEntityItem::getProperties() const { EntityItemProperties properties = EntityItem::getProperties(); // get the properties from our base class - COPY_ENTITY_PROPERTY_TO_PROPERTIES(linePoints, getLinePoints); properties._color = getXColor(); properties._colorChanged = false; properties._lineWidth = getLineWidth(); properties._lineWidthChanged = false; + + COPY_ENTITY_PROPERTY_TO_PROPERTIES(linePoints, getLinePoints); properties._glowLevel = getGlowLevel(); @@ -91,7 +92,7 @@ int LineEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, READ_ENTITY_PROPERTY(PROP_COLOR, rgbColor, setColor); READ_ENTITY_PROPERTY(PROP_LINE_WIDTH, float, setLineWidth); -// READ_ENTITY_PROPERTY(PROP_LINE_POINTS, QVector, setLinePoints); + READ_ENTITY_PROPERTY(PROP_LINE_POINTS, QVector, setLinePoints); return bytesRead; @@ -103,6 +104,7 @@ EntityPropertyFlags LineEntityItem::getEntityProperties(EncodeBitstreamParams& p EntityPropertyFlags requestedProperties = EntityItem::getEntityProperties(params); requestedProperties += PROP_COLOR; requestedProperties += PROP_LINE_WIDTH; + requestedProperties += PROP_LINE_POINTS; return requestedProperties; } @@ -118,6 +120,7 @@ void LineEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBits APPEND_ENTITY_PROPERTY(PROP_COLOR, getColor()); APPEND_ENTITY_PROPERTY(PROP_LINE_WIDTH, getLineWidth()); + APPEND_ENTITY_PROPERTY(PROP_LINE_POINTS, getLinePoints()); } void LineEntityItem::debugDump() const { diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 4f7d89492b..05c7e2ee5e 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -325,6 +325,7 @@ bool OctreePacketData::appendValue(uint8_t value) { bool OctreePacketData::appendValue(uint16_t value) { const unsigned char* data = (const unsigned char*)&value; + int length = sizeof(value); bool success = append(data, length); if (success) { @@ -381,12 +382,19 @@ bool OctreePacketData::appendValue(const glm::vec3& value) { } bool OctreePacketData::appendValue(const QVector& value){ - const unsigned char* data = (const unsigned char*)&value; - int length = sizeof(value); - bool success = append(data, length); - if (success){ + const unsigned char* data = (const unsigned char*)value.data(); + uint16_t qVecSize = (uint16_t)value.size(); + int length = qVecSize * sizeof(glm::vec3); + const unsigned char* sizePointer = (const unsigned char*)&qVecSize; + bool success = append(sizePointer, sizeof(uint16_t)); + if(success){ + _bytesOfValues += qVecSize; + _totalBytesOfValues += qVecSize; + success = append(data, length); + if (success){ _bytesOfValues += length; _totalBytesOfValues += length; + } } return success; } @@ -462,6 +470,9 @@ bool OctreePacketData::appendRawData(const unsigned char* data, int length) { } return success; } +bool OctreePacketData::appendRawData(QByteArray data) { + return appendRawData((unsigned char *)data.data(), data.size()); +} quint64 OctreePacketData::_compressContentTime = 0; quint64 OctreePacketData::_compressContentCalls = 0; @@ -585,3 +596,13 @@ int OctreePacketData::uppackDataFromBytes(const unsigned char* dataBytes, xColor result.blue = dataBytes[BLUE_INDEX]; return sizeof(rgbColor); } + +int OctreePacketData::uppackDataFromBytes(const unsigned char *dataBytes, QVector& result){ + uint16_t length; + memcpy(&length, dataBytes, sizeof(length)); + dataBytes+= sizeof(length); + qDebug()<<"size of LENGTH: "<& result) {memcpy(&result, dataBytes, sizeof(result)); return sizeof(result);} static int uppackDataFromBytes(const unsigned char* dataBytes, bool& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } static int uppackDataFromBytes(const unsigned char* dataBytes, quint64& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } static int uppackDataFromBytes(const unsigned char* dataBytes, uint32_t& result) { memcpy(&result, dataBytes, sizeof(result)); return sizeof(result); } @@ -244,7 +244,7 @@ public: static int uppackDataFromBytes(const unsigned char* dataBytes, QString& result); static int uppackDataFromBytes(const unsigned char* dataBytes, QUuid& result); static int uppackDataFromBytes(const unsigned char* dataBytes, xColor& result); - + static int uppackDataFromBytes(const unsigned char* dataBytes, QVector& result); private: /// appends raw bytes, might fail if byte would cause packet to be too large From cb72b620cf62b36ab28a85f32ec0a48a845fe312 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Fri, 29 May 2015 19:42:07 -0700 Subject: [PATCH 17/32] printing bytes out correctly --- libraries/octree/src/OctreePacketData.cpp | 64 ++++++++++++++------ libraries/shared/src/RegisteredMetaTypes.cpp | 1 + 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 05c7e2ee5e..6afe1c0c0f 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -382,21 +382,47 @@ bool OctreePacketData::appendValue(const glm::vec3& value) { } bool OctreePacketData::appendValue(const QVector& value){ - const unsigned char* data = (const unsigned char*)value.data(); - uint16_t qVecSize = (uint16_t)value.size(); - int length = qVecSize * sizeof(glm::vec3); - const unsigned char* sizePointer = (const unsigned char*)&qVecSize; - bool success = append(sizePointer, sizeof(uint16_t)); - if(success){ - _bytesOfValues += qVecSize; - _totalBytesOfValues += qVecSize; - success = append(data, length); - if (success){ - _bytesOfValues += length; - _totalBytesOfValues += length; - } + +// const unsigned char* data = (const unsigned char*)value.data(); +// uint16_t qVecSize = (uint16_t)value.size(); +// +// int length = qVecSize * sizeof(glm::vec3); +// const unsigned char* sizePointer = (const unsigned char*)&qVecSize; +// bool success = append(sizePointer, sizeof(uint16_t)); +// if(success){ +// _bytesOfValues += qVecSize; +// _totalBytesOfValues += qVecSize; +// success = append(data, length); +// if (success){ +// _bytesOfValues += length; +// _totalBytesOfValues += length; +// } +// } +// return success; + +// const unsigned char* data = (const unsigned char*)value.data(); +// int qVecSize = value.size(); +// +// int length = qVecSize * sizeof(glm::vec3); +// +// bool success = append(data, length); +// if (success){ +// _bytesOfValues += length; +// _totalBytesOfValues += length; +// } +// return success; + qDebug("YAAAR"); + int qVecSize = value.size() * sizeof(glm::vec3); + QByteArray myArray('', qVecSize ); + const char* data = (const char*)value.data(); + for(int i = 0; i < qVecSize; i+=sizeof(float)){ + float num; + memcpy(&num, data, sizeof(float)); + qDebug()<<"NUM***"<& result){ - uint16_t length; - memcpy(&length, dataBytes, sizeof(length)); - dataBytes+= sizeof(length); - qDebug()<<"size of LENGTH: "<(); static int collisionMetaTypeId = qRegisterMetaType(); + void registerMetaTypes(QScriptEngine* engine) { qScriptRegisterMetaType(engine, vec4toScriptValue, vec4FromScriptValue); qScriptRegisterMetaType(engine, vec3toScriptValue, vec3FromScriptValue); From 5e22af8643ff1cbe6ef276a67fa2a20e19e9ce4f Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Sun, 31 May 2015 14:21:28 -0700 Subject: [PATCH 18/32] points and line width persistent accross clients --- libraries/octree/src/OctreePacketData.cpp | 74 ++++++++++++++++++----- libraries/octree/src/OctreePacketData.h | 5 +- 2 files changed, 62 insertions(+), 17 deletions(-) diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 6afe1c0c0f..d4e56b6217 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -362,6 +362,7 @@ bool OctreePacketData::appendValue(float value) { const unsigned char* data = (const unsigned char*)&value; int length = sizeof(value); + qDebug()<<"Line Width Value!**"<& value){ // _totalBytesOfValues += length; // } // return success; - qDebug("YAAAR"); - int qVecSize = value.size() * sizeof(glm::vec3); - QByteArray myArray('', qVecSize ); - const char* data = (const char*)value.data(); - for(int i = 0; i < qVecSize; i+=sizeof(float)){ - float num; - memcpy(&num, data, sizeof(float)); - qDebug()<<"NUM***"<& result){ - glm::vec3 p1; - memcpy(&p1, dataBytes, sizeof(p1)); - - qDebug()<<"point 1***"< Date: Sun, 31 May 2015 14:46:20 -0700 Subject: [PATCH 19/32] fixed bug in qvec unpacking code --- libraries/octree/src/OctreePacketData.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index d4e56b6217..e3c438a312 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -658,15 +658,19 @@ int OctreePacketData::uppackDataFromBytes(const unsigned char *dataBytes, QVecto for(int i = 0 ; i < length; i+= sizeof(float) * 3) { //Go through and create three floats glm::vec3 point; - float num; - memcpy(&num, dataBytes, sizeof(float)); - point.x = num; - memcpy(&num, dataBytes, sizeof(float)); - point.y = num; - memcpy(&num, dataBytes, sizeof(float)); - point.z = num; + float x; + memcpy(&x, dataBytes, sizeof(float)); + point.x = x; + dataBytes += sizeof(float); + float y; + memcpy(&y, dataBytes, sizeof(float)); + point.y = y; + dataBytes += sizeof(float); + float z; + memcpy(&z, dataBytes, sizeof(float)); + point.z = z; + dataBytes += sizeof(float); result.append(point); - dataBytes += sizeof(float) * 3; } qDebug()<<"LENGTH OF ARRAY ON UNPACKING**"< Date: Sun, 31 May 2015 14:52:44 -0700 Subject: [PATCH 20/32] cleaned up logging and testing code. --- .../src/RenderableLineEntityItem.cpp | 9 +--- libraries/entities/src/LineEntityItem.h | 8 --- libraries/octree/src/OctreePacketData.cpp | 52 ------------------- libraries/octree/src/OctreePacketData.h | 5 +- 4 files changed, 2 insertions(+), 72 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index f5e84a6bfa..ceeb5a1ab4 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -31,10 +31,8 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glm::quat rotation = getRotation(); glm::vec4 lineColor(toGlm(getXColor()), getLocalRenderAlpha()); glPushMatrix(); - glLineWidth(getLineWidth()); auto geometryCache = DependencyManager::get(); - if(_lineVerticesID == GeometryCache::UNKNOWN_ID){ _lineVerticesID = geometryCache ->allocateID(); } @@ -42,13 +40,8 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); QVector points; - glm::vec3 p1 = {0, 0, 0}; - glm::vec3 p2 = {1, 1, 0}; - points<updateVertices(_lineVerticesID, getLinePoints(), lineColor); -// geometryCache->updateVertices(_lineVerticesID, points, lineColor); - - geometryCache->renderVertices(gpu::LINE_STRIP, _lineVerticesID); + geometryCache->renderVertices(gpu::LINE_STRIP, _lineVerticesID); glPopMatrix(); RenderableDebugableEntityItem::render(this, args); }; diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index afd20a3722..10001a4c71 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -59,17 +59,9 @@ class LineEntityItem : public EntityItem { return _lineWidth; } - void setLinePoints(const QVector& points){ qDebug()<<"points " << points; _points = points; -// _points = QVector(0); -// glm::vec3 p1 = { 0,0,0}; -// glm::vec3 p2 = {1, -1,2}; -// glm::vec3 p3 = {4, 0, 0}; -// _points <& getLinePoints() const{ diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index e3c438a312..f76e2a6d9b 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -362,7 +362,6 @@ bool OctreePacketData::appendValue(float value) { const unsigned char* data = (const unsigned char*)&value; int length = sizeof(value); - qDebug()<<"Line Width Value!**"<& value){ - -// const unsigned char* data = (const unsigned char*)value.data(); -// uint16_t qVecSize = (uint16_t)value.size(); -// -// int length = qVecSize * sizeof(glm::vec3); -// const unsigned char* sizePointer = (const unsigned char*)&qVecSize; -// bool success = append(sizePointer, sizeof(uint16_t)); -// if(success){ -// _bytesOfValues += qVecSize; -// _totalBytesOfValues += qVecSize; -// success = append(data, length); -// if (success){ -// _bytesOfValues += length; -// _totalBytesOfValues += length; -// } -// } -// return success; - -// const unsigned char* data = (const unsigned char*)value.data(); -// int qVecSize = value.size(); -// -// int length = qVecSize * sizeof(glm::vec3); -// -// bool success = append(data, length); -// if (success){ -// _bytesOfValues += length; -// _totalBytesOfValues += length; -// } -// return success; - uint16_t qVecSize = value.size() * sizeof(glm::vec3); - QByteArray myArray; - const char* data = (const char*)value.data(); - - char* sizePointer = (char*)&qVecSize; QByteArray vecSize(sizePointer, sizeof(uint16_t)); myArray.append(vecSize); uint16_t arrayLength; memcpy(&arrayLength, myArray.data(), sizeof(uint16_t)); - qDebug()<<"array length.. shnur"< Date: Sun, 31 May 2015 14:59:09 -0700 Subject: [PATCH 21/32] array of points takes absolute positions now, so script writer has an easier time --- libraries/entities-renderer/src/RenderableLineEntityItem.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index ceeb5a1ab4..95c0ad9d6c 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -36,7 +36,8 @@ void RenderableLineEntityItem::render(RenderArgs* args) { if(_lineVerticesID == GeometryCache::UNKNOWN_ID){ _lineVerticesID = geometryCache ->allocateID(); } - glTranslatef(position.x, position.y, position.z); + //TODO: Figure out clean , efficient way to do relative line positioning. For now we'll just use absolute positioning. + //glTranslatef(position.x, position.y, position.z); glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); QVector points; From 9ca5310c21e4855b6a60dbb9499cc02e2788c0e7 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Sun, 31 May 2015 15:33:51 -0700 Subject: [PATCH 22/32] cleaned up another qDebugging line --- libraries/entities/src/LineEntityItem.h | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index 10001a4c71..9b95a41361 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -60,7 +60,6 @@ class LineEntityItem : public EntityItem { } void setLinePoints(const QVector& points){ - qDebug()<<"points " << points; _points = points; } From 8a191a661d3e8d6ad0d23fc51157922569fe451e Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Mon, 1 Jun 2015 09:35:32 -0700 Subject: [PATCH 23/32] adding flag for points changed --- .../entities-renderer/src/RenderableLineEntityItem.cpp | 5 ++++- libraries/entities/src/LineEntityItem.cpp | 10 ++++++++-- libraries/entities/src/LineEntityItem.h | 5 ++--- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 95c0ad9d6c..5c0f7b543c 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -41,7 +41,10 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); QVector points; - geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); + if(_pointsChanged){ + geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); + _pointsChanged = false; + } 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 167b64bde2..28059254ad 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -32,7 +32,8 @@ EntityItem* LineEntityItem::factory(const EntityItemID& entityID, const EntityIt LineEntityItem::LineEntityItem(const EntityItemID& entityItemID, const EntityItemProperties& properties) : EntityItem(entityItemID) , _lineWidth(DEFAULT_LINE_WIDTH), - _points(QVector(0)) + _points(QVector(0)), + _pointsChanged(true) { _type = EntityTypes::Line; _created = properties.getCreated(); @@ -83,7 +84,12 @@ bool LineEntityItem::setProperties(const EntityItemProperties& properties) { return somethingChanged; } -int LineEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, +void LineEntityItem::setLinePoints(const QVector& points) { + _points = points; + _pointsChanged = true; +} + +int LineEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args, EntityPropertyFlags& propertyFlags, bool overwriteLocalData) { diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index 9b95a41361..d1665ec3f8 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -59,9 +59,7 @@ class LineEntityItem : public EntityItem { return _lineWidth; } - void setLinePoints(const QVector& points){ - _points = points; - } + void setLinePoints(const QVector& points); const QVector& getLinePoints() const{ return _points; @@ -81,6 +79,7 @@ class LineEntityItem : public EntityItem { protected: rgbColor _color; float _lineWidth; + bool _pointsChanged; QVector _points; }; From 7b08537574fdc820a15d94422fdd0cf69e88721b Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Mon, 1 Jun 2015 09:51:24 -0700 Subject: [PATCH 24/32] code standards fixes --- .../src/RenderableLineEntityItem.cpp | 2 +- libraries/entities/src/LineEntityItem.h | 13 +++---------- libraries/shared/src/RegisteredMetaTypes.cpp | 4 ++-- libraries/shared/src/RegisteredMetaTypes.h | 4 ++-- 4 files changed, 8 insertions(+), 15 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 5c0f7b543c..0351e1f4e0 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -41,7 +41,7 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); QVector points; - if(_pointsChanged){ + if(_pointsChanged) { geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); _pointsChanged = false; } diff --git a/libraries/entities/src/LineEntityItem.h b/libraries/entities/src/LineEntityItem.h index d1665ec3f8..d9533e3204 100644 --- a/libraries/entities/src/LineEntityItem.h +++ b/libraries/entities/src/LineEntityItem.h @@ -51,19 +51,12 @@ class LineEntityItem : public EntityItem { _color[BLUE_INDEX] = value.blue; } - void setLineWidth(float lineWidth){ - _lineWidth = lineWidth; - } - float getLineWidth() const{ - - return _lineWidth; - } + void setLineWidth(float lineWidth){ _lineWidth = lineWidth; } + float getLineWidth() const{ return _lineWidth; } void setLinePoints(const QVector& points); - const QVector& getLinePoints() const{ - return _points; - } + const QVector& getLinePoints() const{ return _points; } virtual ShapeType getShapeType() const { return SHAPE_TYPE_LINE; } diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index dda55680cf..4f57eea411 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -73,7 +73,7 @@ void vec3FromScriptValue(const QScriptValue &object, glm::vec3 &vec3) { vec3.z = object.property("z").toVariant().toFloat(); } -QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector &vector){ +QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector& vector){ QScriptValue array = engine->newArray(); for(int i = 0; i < vector.size(); i++){ array.setProperty(i, vec3toScriptValue(engine, vector.at(i))); @@ -81,7 +81,7 @@ QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector qVectorVec3FromScriptValue(const QScriptValue &array){ +QVector qVectorVec3FromScriptValue(const QScriptValue& array){ QVector newVector(0); int length = array.property("length").toInteger(); diff --git a/libraries/shared/src/RegisteredMetaTypes.h b/libraries/shared/src/RegisteredMetaTypes.h index bab4dc7d08..48eecba227 100644 --- a/libraries/shared/src/RegisteredMetaTypes.h +++ b/libraries/shared/src/RegisteredMetaTypes.h @@ -56,8 +56,8 @@ void qColorFromScriptValue(const QScriptValue& object, QColor& color); QScriptValue qURLToScriptValue(QScriptEngine* engine, const QUrl& url); void qURLFromScriptValue(const QScriptValue& object, QUrl& url); -QScriptValue qVectorVec3ToScriptValue(QScriptEngine*, const QVector& vector); -QVector qVectorVec3FromScriptValue( const QScriptValue &array); +QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector& vector); +QVector qVectorVec3FromScriptValue( const QScriptValue& array); class PickRay { public: From 93c3f90c950afea0a9ecb23fc29fd93e4bec90f6 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Mon, 1 Jun 2015 11:08:48 -0700 Subject: [PATCH 25/32] clened up read and write of qVec- no longer converting between qVector and qByteArray --- libraries/octree/src/OctreePacketData.cpp | 56 ++++++++--------------- 1 file changed, 19 insertions(+), 37 deletions(-) diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index f76e2a6d9b..50579e3979 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -381,23 +381,19 @@ bool OctreePacketData::appendValue(const glm::vec3& value) { return success; } -bool OctreePacketData::appendValue(const QVector& value){ - uint16_t qVecSize = value.size() * sizeof(glm::vec3); - QByteArray myArray; - const char* data = (const char*)value.data(); - char* sizePointer = (char*)&qVecSize; - QByteArray vecSize(sizePointer, sizeof(uint16_t)); - myArray.append(vecSize); - uint16_t arrayLength; - memcpy(&arrayLength, myArray.data(), sizeof(uint16_t)); - for(int i = 0; i < qVecSize; i++){ - myArray.append(data[i]); - } - int length = qVecSize + sizeof(uint16_t); - bool success = append((const unsigned char*)myArray.constData(), myArray.size()); +bool OctreePacketData::appendValue(const QVector& value) { + uint16_t qVecSize = value.size(); + uint16_t sizeLength = sizeof(qVecSize); + bool success = append((const unsigned char*)&qVecSize, sizeLength); + qDebug()<<"appendlength"<& result){ +int OctreePacketData::uppackDataFromBytes(const unsigned char *dataBytes, QVector& result) { uint16_t length; memcpy(&length, dataBytes, sizeof(uint16_t)); dataBytes += sizeof(length); - glm::vec3 myVec; - for(int i = 0 ; i < length; i+= sizeof(float) * 3) { - //Go through and create three floats - glm::vec3 point; - float x; - memcpy(&x, dataBytes, sizeof(float)); - point.x = x; - dataBytes += sizeof(float); - float y; - memcpy(&y, dataBytes, sizeof(float)); - point.y = y; - dataBytes += sizeof(float); - float z; - memcpy(&z, dataBytes, sizeof(float)); - point.z = z; - dataBytes += sizeof(float); - result.append(point); - } - return length + sizeof(length); -} + qDebug()<<"unpacking length"< Date: Mon, 1 Jun 2015 11:11:08 -0700 Subject: [PATCH 26/32] removed unneeded append methods from OctreePacketData --- libraries/octree/src/OctreePacketData.cpp | 5 ----- libraries/octree/src/OctreePacketData.h | 1 - 2 files changed, 6 deletions(-) diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 50579e3979..5096550181 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -385,7 +385,6 @@ bool OctreePacketData::appendValue(const QVector& value) { uint16_t qVecSize = value.size(); uint16_t sizeLength = sizeof(qVecSize); bool success = append((const unsigned char*)&qVecSize, sizeLength); - qDebug()<<"appendlength"< Date: Mon, 1 Jun 2015 15:16:08 -0700 Subject: [PATCH 27/32] resolved merge conflicts... but now lines not flying across clients --- cmake/externals/polyvox/CMakeLists.txt | 4 ++-- libraries/entities/src/EntityPropertyFlags.h | 11 ++++------- libraries/octree/src/OctreePacketData.h | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/cmake/externals/polyvox/CMakeLists.txt b/cmake/externals/polyvox/CMakeLists.txt index 76302f9b4a..1417759f4b 100644 --- a/cmake/externals/polyvox/CMakeLists.txt +++ b/cmake/externals/polyvox/CMakeLists.txt @@ -3,8 +3,8 @@ set(EXTERNAL_NAME polyvox) include(ExternalProject) ExternalProject_Add( ${EXTERNAL_NAME} - URL http://hifi-public.s3.amazonaws.com/dependencies/polyvox-master-2015-5-27.zip - URL_MD5 e3dd09a24df4db29ba370e3bea753388 + URL http://hifi-public.s3.amazonaws.com/dependencies/polyvox.zip + URL_MD5 URL_MD5 904b840328278c9b36fa7a14be730c34 CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH= BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build LOG_DOWNLOAD 1 diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 9b93dcd373..8eb09fece0 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -109,18 +109,15 @@ enum EntityPropertyList { PROP_COLLISION_SOUND_URL, PROP_RESTITUTION, PROP_FRICTION, -<<<<<<< HEAD - - //for lines - PROP_LINE_WIDTH, - PROP_LINE_POINTS, -======= PROP_VOXEL_VOLUME_SIZE, PROP_VOXEL_DATA, PROP_VOXEL_SURFACE_STYLE, ->>>>>>> master + //for lines + PROP_LINE_WIDTH, + PROP_LINE_POINTS, + //////////////////////////////////////////////////////////////////////////////////////////////////// // ATTENTION: add new properties ABOVE this line PROP_AFTER_LAST_ITEM, diff --git a/libraries/octree/src/OctreePacketData.h b/libraries/octree/src/OctreePacketData.h index ed9c0a4703..9476fe024e 100644 --- a/libraries/octree/src/OctreePacketData.h +++ b/libraries/octree/src/OctreePacketData.h @@ -244,7 +244,7 @@ public: static int unpackDataFromBytes(const unsigned char* dataBytes, QString& result); static int unpackDataFromBytes(const unsigned char* dataBytes, QUuid& result); static int unpackDataFromBytes(const unsigned char* dataBytes, xColor& result); - static int uppackDataFromBytes(const unsigned char* dataBytes, QVector& result); + static int unpackDataFromBytes(const unsigned char* dataBytes, QVector& result); static int unpackDataFromBytes(const unsigned char* dataBytes, QByteArray& result); From 785144404c252c3e4ae568eefbba6ce5c9a1df97 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Mon, 1 Jun 2015 15:37:29 -0700 Subject: [PATCH 28/32] changed entity packet type version number --- libraries/octree/src/OctreePacketData.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 42b3eec2b2..9d0d98686a 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -608,7 +608,6 @@ int OctreePacketData::unpackDataFromBytes(const unsigned char *dataBytes, QVecto uint16_t length; memcpy(&length, dataBytes, sizeof(uint16_t)); dataBytes += sizeof(length); - qDebug()<<"unpacking length"< Date: Tue, 2 Jun 2015 09:38:45 -0700 Subject: [PATCH 29/32] fixed packet number increment logic --- libraries/networking/src/PacketHeaders.cpp | 4 +--- libraries/networking/src/PacketHeaders.h | 5 ++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/libraries/networking/src/PacketHeaders.cpp b/libraries/networking/src/PacketHeaders.cpp index c52f44b6b9..78bb3f11e1 100644 --- a/libraries/networking/src/PacketHeaders.cpp +++ b/libraries/networking/src/PacketHeaders.cpp @@ -73,7 +73,7 @@ PacketVersion versionForPacketType(PacketType packetType) { case PacketTypeEntityAdd: case PacketTypeEntityEdit: case PacketTypeEntityData: - return VERSION_NO_ENTITY_ID_SWAP; + return VERSION_ENTITIES_LINE_POINTS; case PacketTypeEntityErase: return 2; case PacketTypeAudioStreamStats: @@ -135,8 +135,6 @@ QString nameForPacketType(PacketType packetType) { PACKET_TYPE_NAME_LOOKUP(PacketTypeUnverifiedPingReply); PACKET_TYPE_NAME_LOOKUP(PacketTypeEntityAdd); PACKET_TYPE_NAME_LOOKUP(PacketTypeEntityEdit); - PACKET_TYPE_NAME_LOOKUP(PacketTypeParticleEntitiesFix); - PACKET_TYPE_NAME_LOOKUP(PacketTypeLinePoints); default: return QString("Type: ") + QString::number((int)packetType); } diff --git a/libraries/networking/src/PacketHeaders.h b/libraries/networking/src/PacketHeaders.h index aad7f508a1..228df1cdde 100644 --- a/libraries/networking/src/PacketHeaders.h +++ b/libraries/networking/src/PacketHeaders.h @@ -79,9 +79,7 @@ enum PacketType { PacketTypeSignedTransactionPayment, PacketTypeIceServerHeartbeat, // 50 PacketTypeUnverifiedPing, - PacketTypeUnverifiedPingReply, - PacketTypeParticleEntitiesFix, - PacketTypeLinePoints + PacketTypeUnverifiedPingReply }; typedef char PacketVersion; @@ -184,5 +182,6 @@ const PacketVersion VERSION_ENTITIES_HAVE_COLLISION_SOUND_URL = 25; const PacketVersion VERSION_ENTITIES_HAVE_FRICTION = 26; const PacketVersion VERSION_NO_ENTITY_ID_SWAP = 27; const PacketVersion VERSION_ENTITIES_PARTICLE_FIX = 28; +const PacketVersion VERSION_ENTITIES_LINE_POINTS = 29; #endif // hifi_PacketHeaders_h From 55ffb7f1c0e33745059f29998387f3dacd686e92 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 2 Jun 2015 12:51:45 -0700 Subject: [PATCH 30/32] code style changes --- .../entities-renderer/src/RenderableLineEntityItem.cpp | 2 +- libraries/entities/src/EntityItemProperties.cpp | 6 +++--- libraries/entities/src/EntityItemPropertiesMacros.h | 2 +- libraries/entities/src/LineEntityItem.cpp | 4 ++-- libraries/octree/src/OctreePacketData.cpp | 9 ++------- libraries/shared/src/RegisteredMetaTypes.cpp | 6 +++--- 6 files changed, 12 insertions(+), 17 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 480fbe5bb9..16d54feda0 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -41,7 +41,7 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); QVector points; - if(_pointsChanged) { + if (_pointsChanged) { geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); _pointsChanged = false; } diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 40970fc3f1..407791a65d 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -96,7 +96,7 @@ CONSTRUCT_PROPERTY(name, ENTITY_ITEM_DEFAULT_NAME), CONSTRUCT_PROPERTY(backgroundMode, BACKGROUND_MODE_INHERIT), CONSTRUCT_PROPERTY(sourceUrl, ""), CONSTRUCT_PROPERTY(lineWidth, LineEntityItem::DEFAULT_LINE_WIDTH), -CONSTRUCT_PROPERTY(linePoints, 0), +CONSTRUCT_PROPERTY(linePoints, QVector()), _id(UNKNOWN_ENTITY_ID), @@ -769,7 +769,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem APPEND_ENTITY_PROPERTY(PROP_VOXEL_SURFACE_STYLE, properties.getVoxelSurfaceStyle()); } - if(properties.getType() == EntityTypes::Line){ + if (properties.getType() == EntityTypes::Line) { APPEND_ENTITY_PROPERTY(PROP_LINE_WIDTH, properties.getLineWidth()); APPEND_ENTITY_PROPERTY(PROP_LINE_POINTS, properties.getLinePoints()); } @@ -1014,7 +1014,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_VOXEL_SURFACE_STYLE, uint16_t, setVoxelSurfaceStyle); } - if(properties.getType() == EntityTypes::Line) { + if (properties.getType() == EntityTypes::Line) { READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_WIDTH, float, setLineWidth); READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_LINE_POINTS, QVector, setLinePoints); } diff --git a/libraries/entities/src/EntityItemPropertiesMacros.h b/libraries/entities/src/EntityItemPropertiesMacros.h index 753a53479b..268107990b 100644 --- a/libraries/entities/src/EntityItemPropertiesMacros.h +++ b/libraries/entities/src/EntityItemPropertiesMacros.h @@ -169,7 +169,7 @@ inline glmVec3 glmVec3_convertFromScriptValue(const QScriptValue& v, bool& isVal return glm::vec3(0); } -inline qVectorVec3 qVectorVec3_convertFromScriptValue(const QScriptValue& v, bool& isValid){ +inline qVectorVec3 qVectorVec3_convertFromScriptValue(const QScriptValue& v, bool& isValid) { isValid = true; return qVectorVec3FromScriptValue(v); } diff --git a/libraries/entities/src/LineEntityItem.cpp b/libraries/entities/src/LineEntityItem.cpp index 49adbf97fc..c43de8d076 100644 --- a/libraries/entities/src/LineEntityItem.cpp +++ b/libraries/entities/src/LineEntityItem.cpp @@ -50,8 +50,8 @@ EntityItemProperties LineEntityItem::getProperties() const { properties._color = getXColor(); properties._colorChanged = false; - properties._lineWidth = getLineWidth(); - properties._lineWidthChanged = false; + + COPY_ENTITY_PROPERTY_TO_PROPERTIES(lineWidth, getLineWidth); COPY_ENTITY_PROPERTY_TO_PROPERTIES(linePoints, getLinePoints); diff --git a/libraries/octree/src/OctreePacketData.cpp b/libraries/octree/src/OctreePacketData.cpp index 9d0d98686a..7c977210fc 100644 --- a/libraries/octree/src/OctreePacketData.cpp +++ b/libraries/octree/src/OctreePacketData.cpp @@ -383,14 +383,9 @@ bool OctreePacketData::appendValue(const glm::vec3& value) { bool OctreePacketData::appendValue(const QVector& value) { uint16_t qVecSize = value.size(); - uint16_t sizeLength = sizeof(qVecSize); - bool success = append((const unsigned char*)&qVecSize, sizeLength); - if(success){ - _bytesOfValues += sizeLength; - _totalBytesOfValues += sizeLength; - } + bool success = appendValue(qVecSize); success = append((const unsigned char*)value.constData(), qVecSize * sizeof(glm::vec3)); - if(success){ + if (success) { _bytesOfValues += qVecSize * sizeof(glm::vec3); _totalBytesOfValues += qVecSize * sizeof(glm::vec3); } diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index 4f57eea411..241f835a46 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -75,17 +75,17 @@ void vec3FromScriptValue(const QScriptValue &object, glm::vec3 &vec3) { QScriptValue qVectorVec3ToScriptValue(QScriptEngine* engine, const QVector& vector){ QScriptValue array = engine->newArray(); - for(int i = 0; i < vector.size(); i++){ + for (int i = 0; i < vector.size(); i++) { array.setProperty(i, vec3toScriptValue(engine, vector.at(i))); } return array; } QVector qVectorVec3FromScriptValue(const QScriptValue& array){ - QVector newVector(0); + QVector newVector; int length = array.property("length").toInteger(); - for(int i = 0; i < length; i++) { + for (int i = 0; i < length; i++) { glm::vec3 newVec3 = glm::vec3(); vec3FromScriptValue(array.property(i), newVec3); newVector << newVec3; From a98baef73603161f7149792de9584d6923a9830f Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 2 Jun 2015 13:56:18 -0700 Subject: [PATCH 31/32] another code cleanup --- libraries/entities-renderer/src/RenderableLineEntityItem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 16d54feda0..3b18210d6b 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -33,7 +33,7 @@ void RenderableLineEntityItem::render(RenderArgs* args) { glPushMatrix(); glLineWidth(getLineWidth()); auto geometryCache = DependencyManager::get(); - if(_lineVerticesID == GeometryCache::UNKNOWN_ID){ + if (_lineVerticesID == GeometryCache::UNKNOWN_ID) { _lineVerticesID = geometryCache ->allocateID(); } //TODO: Figure out clean , efficient way to do relative line positioning. For now we'll just use absolute positioning. From 7527efc2d6b8b9329ea1948c97d16d8c18293a79 Mon Sep 17 00:00:00 2001 From: Eric Levin Date: Tue, 2 Jun 2015 13:58:09 -0700 Subject: [PATCH 32/32] removed unsuded variable --- libraries/entities-renderer/src/RenderableLineEntityItem.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp index 3b18210d6b..1951b2592b 100644 --- a/libraries/entities-renderer/src/RenderableLineEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableLineEntityItem.cpp @@ -40,7 +40,6 @@ void RenderableLineEntityItem::render(RenderArgs* args) { //glTranslatef(position.x, position.y, position.z); glm::vec3 axis = glm::axis(rotation); glRotatef(glm::degrees(glm::angle(rotation)), axis.x, axis.y, axis.z); - QVector points; if (_pointsChanged) { geometryCache->updateVertices(_lineVerticesID, getLinePoints(), lineColor); _pointsChanged = false;