More thread safety

This commit is contained in:
Brad Davis 2017-04-04 15:09:21 -07:00
parent cd7c1643a3
commit 15f7e895aa
8 changed files with 207 additions and 50 deletions

View file

@ -660,22 +660,22 @@ void RenderablePolyVoxEntityItem::computeShapeInfo(ShapeInfo& info) {
}); });
} }
void RenderablePolyVoxEntityItem::setXTextureURL(QString xTextureURL) { void RenderablePolyVoxEntityItem::setXTextureURL(const QString& xTextureURL) {
if (xTextureURL != _xTextureURL) { if (xTextureURL != getXTextureURL()) {
_xTexture.clear(); _xTexture.clear();
PolyVoxEntityItem::setXTextureURL(xTextureURL); PolyVoxEntityItem::setXTextureURL(xTextureURL);
} }
} }
void RenderablePolyVoxEntityItem::setYTextureURL(QString yTextureURL) { void RenderablePolyVoxEntityItem::setYTextureURL(const QString& yTextureURL) {
if (yTextureURL != _yTextureURL) { if (yTextureURL != getYTextureURL()) {
_yTexture.clear(); _yTexture.clear();
PolyVoxEntityItem::setYTextureURL(yTextureURL); PolyVoxEntityItem::setYTextureURL(yTextureURL);
} }
} }
void RenderablePolyVoxEntityItem::setZTextureURL(QString zTextureURL) { void RenderablePolyVoxEntityItem::setZTextureURL(const QString& zTextureURL) {
if (zTextureURL != _zTextureURL) { if (zTextureURL != getZTextureURL()) {
_zTexture.clear(); _zTexture.clear();
PolyVoxEntityItem::setZTextureURL(zTextureURL); PolyVoxEntityItem::setZTextureURL(zTextureURL);
} }

View file

@ -101,9 +101,9 @@ public:
virtual bool setAll(uint8_t toValue) override; virtual bool setAll(uint8_t toValue) override;
virtual bool setCuboid(const glm::vec3& lowPosition, const glm::vec3& cuboidSize, int toValue) override; virtual bool setCuboid(const glm::vec3& lowPosition, const glm::vec3& cuboidSize, int toValue) override;
virtual void setXTextureURL(QString xTextureURL) override; virtual void setXTextureURL(const QString& xTextureURL) override;
virtual void setYTextureURL(QString yTextureURL) override; virtual void setYTextureURL(const QString& yTextureURL) override;
virtual void setZTextureURL(QString zTextureURL) override; virtual void setZTextureURL(const QString& zTextureURL) override;
virtual bool addToScene(EntityItemPointer self, virtual bool addToScene(EntityItemPointer self,
std::shared_ptr<render::Scene> scene, std::shared_ptr<render::Scene> scene,

View file

@ -242,3 +242,129 @@ const QByteArray PolyVoxEntityItem::getVoxelData() const {
}); });
return voxelDataCopy; return voxelDataCopy;
} }
void PolyVoxEntityItem::setXTextureURL(const QString& xTextureURL) {
withWriteLock([&] {
_xTextureURL = xTextureURL;
});
}
QString PolyVoxEntityItem::getXTextureURL() const {
QString result;
withReadLock([&] {
result = _xTextureURL;
});
return result;
}
void PolyVoxEntityItem::setYTextureURL(const QString& yTextureURL) {
withWriteLock([&] {
_yTextureURL = yTextureURL;
});
}
QString PolyVoxEntityItem::getYTextureURL() const {
QString result;
withReadLock([&] {
result = _yTextureURL;
});
return result;
}
void PolyVoxEntityItem::setZTextureURL(const QString& zTextureURL) {
withWriteLock([&] {
_zTextureURL = zTextureURL;
});
}
QString PolyVoxEntityItem::getZTextureURL() const {
QString result;
withReadLock([&] {
result = _zTextureURL;
});
return result;
}
void PolyVoxEntityItem::setXNNeighborID(const EntityItemID& xNNeighborID) {
withWriteLock([&] {
_xNNeighborID = xNNeighborID;
});
}
EntityItemID PolyVoxEntityItem::getXNNeighborID() const {
EntityItemID result;
withReadLock([&] {
result = _xNNeighborID;
});
return result;
}
void PolyVoxEntityItem::setYNNeighborID(const EntityItemID& yNNeighborID) {
withWriteLock([&] {
_yNNeighborID = yNNeighborID;
});
}
EntityItemID PolyVoxEntityItem::getYNNeighborID() const {
EntityItemID result;
withReadLock([&] {
result = _yNNeighborID;
});
return result;
}
void PolyVoxEntityItem::setZNNeighborID(const EntityItemID& zNNeighborID) {
withWriteLock([&] {
_zNNeighborID = zNNeighborID;
});
}
EntityItemID PolyVoxEntityItem::getZNNeighborID() const {
EntityItemID result;
withReadLock([&] {
result = _zNNeighborID;
});
return result;
}
void PolyVoxEntityItem::setXPNeighborID(const EntityItemID& xPNeighborID) {
withWriteLock([&] {
_xPNeighborID = xPNeighborID;
});
}
EntityItemID PolyVoxEntityItem::getXPNeighborID() const {
EntityItemID result;
withReadLock([&] {
result = _xPNeighborID;
});
return result;
}
void PolyVoxEntityItem::setYPNeighborID(const EntityItemID& yPNeighborID) {
withWriteLock([&] {
_yPNeighborID = yPNeighborID;
});
}
EntityItemID PolyVoxEntityItem::getYPNeighborID() const {
EntityItemID result;
withReadLock([&] {
result = _yPNeighborID;
});
return result;
}
void PolyVoxEntityItem::setZPNeighborID(const EntityItemID& zPNeighborID) {
withWriteLock([&] {
_zPNeighborID = zPNeighborID;
});
}
EntityItemID PolyVoxEntityItem::getZPNeighborID() const {
EntityItemID result;
withReadLock([&] {
result = _zPNeighborID;
});
return result;
}

View file

@ -99,36 +99,36 @@ class PolyVoxEntityItem : public EntityItem {
static QByteArray makeEmptyVoxelData(quint16 voxelXSize = 16, quint16 voxelYSize = 16, quint16 voxelZSize = 16); static QByteArray makeEmptyVoxelData(quint16 voxelXSize = 16, quint16 voxelYSize = 16, quint16 voxelZSize = 16);
static const QString DEFAULT_X_TEXTURE_URL; static const QString DEFAULT_X_TEXTURE_URL;
virtual void setXTextureURL(QString xTextureURL) { _xTextureURL = xTextureURL; } virtual void setXTextureURL(const QString& xTextureURL);
virtual const QString& getXTextureURL() const { return _xTextureURL; } QString getXTextureURL() const;
static const QString DEFAULT_Y_TEXTURE_URL; static const QString DEFAULT_Y_TEXTURE_URL;
virtual void setYTextureURL(QString yTextureURL) { _yTextureURL = yTextureURL; } virtual void setYTextureURL(const QString& yTextureURL);
virtual const QString& getYTextureURL() const { return _yTextureURL; } QString getYTextureURL() const;
static const QString DEFAULT_Z_TEXTURE_URL; static const QString DEFAULT_Z_TEXTURE_URL;
virtual void setZTextureURL(QString zTextureURL) { _zTextureURL = zTextureURL; } virtual void setZTextureURL(const QString& zTextureURL);
virtual const QString& getZTextureURL() const { return _zTextureURL; } QString getZTextureURL() const;
virtual void setXNNeighborID(const EntityItemID& xNNeighborID) { _xNNeighborID = xNNeighborID; } virtual void setXNNeighborID(const EntityItemID& xNNeighborID);
void setXNNeighborID(const QString& xNNeighborID) { setXNNeighborID(QUuid(xNNeighborID)); } void setXNNeighborID(const QString& xNNeighborID);
virtual const EntityItemID& getXNNeighborID() const { return _xNNeighborID; } virtual EntityItemID getXNNeighborID() const;
virtual void setYNNeighborID(const EntityItemID& yNNeighborID) { _yNNeighborID = yNNeighborID; } virtual void setYNNeighborID(const EntityItemID& yNNeighborID);
void setYNNeighborID(const QString& yNNeighborID) { setYNNeighborID(QUuid(yNNeighborID)); } void setYNNeighborID(const QString& yNNeighborID);
virtual const EntityItemID& getYNNeighborID() const { return _yNNeighborID; } virtual EntityItemID getYNNeighborID() const;
virtual void setZNNeighborID(const EntityItemID& zNNeighborID) { _zNNeighborID = zNNeighborID; } virtual void setZNNeighborID(const EntityItemID& zNNeighborID);
void setZNNeighborID(const QString& zNNeighborID) { setZNNeighborID(QUuid(zNNeighborID)); } void setZNNeighborID(const QString& zNNeighborID);
virtual const EntityItemID& getZNNeighborID() const { return _zNNeighborID; } virtual EntityItemID getZNNeighborID() const;
virtual void setXPNeighborID(const EntityItemID& xPNeighborID) { _xPNeighborID = xPNeighborID; } virtual void setXPNeighborID(const EntityItemID& xPNeighborID);
void setXPNeighborID(const QString& xPNeighborID) { setXPNeighborID(QUuid(xPNeighborID)); } void setXPNeighborID(const QString& xPNeighborID);
virtual const EntityItemID& getXPNeighborID() const { return _xPNeighborID; } virtual EntityItemID getXPNeighborID() const;
virtual void setYPNeighborID(const EntityItemID& yPNeighborID) { _yPNeighborID = yPNeighborID; } virtual void setYPNeighborID(const EntityItemID& yPNeighborID);
void setYPNeighborID(const QString& yPNeighborID) { setYPNeighborID(QUuid(yPNeighborID)); } void setYPNeighborID(const QString& yPNeighborID);
virtual const EntityItemID& getYPNeighborID() const { return _yPNeighborID; } virtual EntityItemID getYPNeighborID() const;
virtual void setZPNeighborID(const EntityItemID& zPNeighborID) { _zPNeighborID = zPNeighborID; } virtual void setZPNeighborID(const EntityItemID& zPNeighborID);
void setZPNeighborID(const QString& zPNeighborID) { setZPNeighborID(QUuid(zPNeighborID)); } void setZPNeighborID(const QString& zPNeighborID);
virtual const EntityItemID& getZPNeighborID() const { return _zPNeighborID; } virtual EntityItemID getZPNeighborID() const;
virtual void rebakeMesh() {}; virtual void rebakeMesh() {};

View file

@ -124,18 +124,26 @@ bool WebEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const g
} }
void WebEntityItem::setSourceUrl(const QString& value) { void WebEntityItem::setSourceUrl(const QString& value) {
if (_sourceUrl != value) { withWriteLock([&] {
auto newURL = QUrl::fromUserInput(value); if (_sourceUrl != value) {
auto newURL = QUrl::fromUserInput(value);
if (newURL.isValid()) { if (newURL.isValid()) {
_sourceUrl = newURL.toDisplayString(); _sourceUrl = newURL.toDisplayString();
} else { } else {
qCDebug(entities) << "Clearing web entity source URL since" << value << "cannot be parsed to a valid URL."; qCDebug(entities) << "Clearing web entity source URL since" << value << "cannot be parsed to a valid URL.";
}
} }
} });
} }
const QString& WebEntityItem::getSourceUrl() const { return _sourceUrl; } QString WebEntityItem::getSourceUrl() const {
QString result;
withReadLock([&] {
result = _sourceUrl;
});
return result;
}
void WebEntityItem::setDPI(uint16_t value) { void WebEntityItem::setDPI(uint16_t value) {
_dpi = value; _dpi = value;

View file

@ -52,7 +52,7 @@ public:
void** intersectedObject, bool precisionPicking) const override; void** intersectedObject, bool precisionPicking) const override;
virtual void setSourceUrl(const QString& value); virtual void setSourceUrl(const QString& value);
const QString& getSourceUrl() const; QString getSourceUrl() const;
virtual bool wantsHandControllerPointerEvents() const override { return true; } virtual bool wantsHandControllerPointerEvents() const override { return true; }

View file

@ -208,10 +208,12 @@ ShapeType ZoneEntityItem::getShapeType() const {
} }
void ZoneEntityItem::setCompoundShapeURL(const QString& url) { void ZoneEntityItem::setCompoundShapeURL(const QString& url) {
_compoundShapeURL = url; withWriteLock([&] {
if (_compoundShapeURL.isEmpty() && _shapeType == SHAPE_TYPE_COMPOUND) { _compoundShapeURL = url;
_shapeType = DEFAULT_SHAPE_TYPE; if (_compoundShapeURL.isEmpty() && _shapeType == SHAPE_TYPE_COMPOUND) {
} _shapeType = DEFAULT_SHAPE_TYPE;
}
});
} }
bool ZoneEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, bool ZoneEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction,
@ -223,7 +225,9 @@ bool ZoneEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const
} }
void ZoneEntityItem::setFilterURL(QString url) { void ZoneEntityItem::setFilterURL(QString url) {
_filterURL = url; withWriteLock([&] {
_filterURL = url;
});
if (DependencyManager::isSet<EntityEditFilters>()) { if (DependencyManager::isSet<EntityEditFilters>()) {
auto entityEditFilters = DependencyManager::get<EntityEditFilters>(); auto entityEditFilters = DependencyManager::get<EntityEditFilters>();
qCDebug(entities) << "adding filter " << url << "for zone" << getEntityItemID(); qCDebug(entities) << "adding filter " << url << "for zone" << getEntityItemID();
@ -231,3 +235,22 @@ void ZoneEntityItem::setFilterURL(QString url) {
} }
} }
QString ZoneEntityItem::getFilterURL() const {
QString result;
withReadLock([&] {
result = _filterURL;
});
return result;
}
bool ZoneEntityItem::hasCompoundShapeURL() const {
return !getCompoundShapeURL().isEmpty();
}
QString ZoneEntityItem::getCompoundShapeURL() const {
QString result;
withReadLock([&] {
result = _compoundShapeURL;
});
return result;
}

View file

@ -58,8 +58,8 @@ public:
void setShapeType(ShapeType type) override { _shapeType = type; } void setShapeType(ShapeType type) override { _shapeType = type; }
virtual ShapeType getShapeType() const override; virtual ShapeType getShapeType() const override;
virtual bool hasCompoundShapeURL() const { return !_compoundShapeURL.isEmpty(); } virtual bool hasCompoundShapeURL() const;
const QString getCompoundShapeURL() const { return _compoundShapeURL; } QString getCompoundShapeURL() const;
virtual void setCompoundShapeURL(const QString& url); virtual void setCompoundShapeURL(const QString& url);
const KeyLightPropertyGroup& getKeyLightProperties() const { return _keyLightProperties; } const KeyLightPropertyGroup& getKeyLightProperties() const { return _keyLightProperties; }
@ -74,7 +74,7 @@ public:
void setFlyingAllowed(bool value) { _flyingAllowed = value; } void setFlyingAllowed(bool value) { _flyingAllowed = value; }
bool getGhostingAllowed() const { return _ghostingAllowed; } bool getGhostingAllowed() const { return _ghostingAllowed; }
void setGhostingAllowed(bool value) { _ghostingAllowed = value; } void setGhostingAllowed(bool value) { _ghostingAllowed = value; }
QString getFilterURL() const { return _filterURL; } QString getFilterURL() const;
void setFilterURL(const QString url); void setFilterURL(const QString url);
virtual bool supportsDetailedRayIntersection() const override { return true; } virtual bool supportsDetailedRayIntersection() const override { return true; }