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) {
if (xTextureURL != _xTextureURL) {
void RenderablePolyVoxEntityItem::setXTextureURL(const QString& xTextureURL) {
if (xTextureURL != getXTextureURL()) {
_xTexture.clear();
PolyVoxEntityItem::setXTextureURL(xTextureURL);
}
}
void RenderablePolyVoxEntityItem::setYTextureURL(QString yTextureURL) {
if (yTextureURL != _yTextureURL) {
void RenderablePolyVoxEntityItem::setYTextureURL(const QString& yTextureURL) {
if (yTextureURL != getYTextureURL()) {
_yTexture.clear();
PolyVoxEntityItem::setYTextureURL(yTextureURL);
}
}
void RenderablePolyVoxEntityItem::setZTextureURL(QString zTextureURL) {
if (zTextureURL != _zTextureURL) {
void RenderablePolyVoxEntityItem::setZTextureURL(const QString& zTextureURL) {
if (zTextureURL != getZTextureURL()) {
_zTexture.clear();
PolyVoxEntityItem::setZTextureURL(zTextureURL);
}

View file

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

View file

@ -242,3 +242,129 @@ const QByteArray PolyVoxEntityItem::getVoxelData() const {
});
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 const QString DEFAULT_X_TEXTURE_URL;
virtual void setXTextureURL(QString xTextureURL) { _xTextureURL = xTextureURL; }
virtual const QString& getXTextureURL() const { return _xTextureURL; }
virtual void setXTextureURL(const QString& xTextureURL);
QString getXTextureURL() const;
static const QString DEFAULT_Y_TEXTURE_URL;
virtual void setYTextureURL(QString yTextureURL) { _yTextureURL = yTextureURL; }
virtual const QString& getYTextureURL() const { return _yTextureURL; }
virtual void setYTextureURL(const QString& yTextureURL);
QString getYTextureURL() const;
static const QString DEFAULT_Z_TEXTURE_URL;
virtual void setZTextureURL(QString zTextureURL) { _zTextureURL = zTextureURL; }
virtual const QString& getZTextureURL() const { return _zTextureURL; }
virtual void setZTextureURL(const QString& zTextureURL);
QString getZTextureURL() const;
virtual void setXNNeighborID(const EntityItemID& xNNeighborID) { _xNNeighborID = xNNeighborID; }
void setXNNeighborID(const QString& xNNeighborID) { setXNNeighborID(QUuid(xNNeighborID)); }
virtual const EntityItemID& getXNNeighborID() const { return _xNNeighborID; }
virtual void setYNNeighborID(const EntityItemID& yNNeighborID) { _yNNeighborID = yNNeighborID; }
void setYNNeighborID(const QString& yNNeighborID) { setYNNeighborID(QUuid(yNNeighborID)); }
virtual const EntityItemID& getYNNeighborID() const { return _yNNeighborID; }
virtual void setZNNeighborID(const EntityItemID& zNNeighborID) { _zNNeighborID = zNNeighborID; }
void setZNNeighborID(const QString& zNNeighborID) { setZNNeighborID(QUuid(zNNeighborID)); }
virtual const EntityItemID& getZNNeighborID() const { return _zNNeighborID; }
virtual void setXNNeighborID(const EntityItemID& xNNeighborID);
void setXNNeighborID(const QString& xNNeighborID);
virtual EntityItemID getXNNeighborID() const;
virtual void setYNNeighborID(const EntityItemID& yNNeighborID);
void setYNNeighborID(const QString& yNNeighborID);
virtual EntityItemID getYNNeighborID() const;
virtual void setZNNeighborID(const EntityItemID& zNNeighborID);
void setZNNeighborID(const QString& zNNeighborID);
virtual EntityItemID getZNNeighborID() const;
virtual void setXPNeighborID(const EntityItemID& xPNeighborID) { _xPNeighborID = xPNeighborID; }
void setXPNeighborID(const QString& xPNeighborID) { setXPNeighborID(QUuid(xPNeighborID)); }
virtual const EntityItemID& getXPNeighborID() const { return _xPNeighborID; }
virtual void setYPNeighborID(const EntityItemID& yPNeighborID) { _yPNeighborID = yPNeighborID; }
void setYPNeighborID(const QString& yPNeighborID) { setYPNeighborID(QUuid(yPNeighborID)); }
virtual const EntityItemID& getYPNeighborID() const { return _yPNeighborID; }
virtual void setZPNeighborID(const EntityItemID& zPNeighborID) { _zPNeighborID = zPNeighborID; }
void setZPNeighborID(const QString& zPNeighborID) { setZPNeighborID(QUuid(zPNeighborID)); }
virtual const EntityItemID& getZPNeighborID() const { return _zPNeighborID; }
virtual void setXPNeighborID(const EntityItemID& xPNeighborID);
void setXPNeighborID(const QString& xPNeighborID);
virtual EntityItemID getXPNeighborID() const;
virtual void setYPNeighborID(const EntityItemID& yPNeighborID);
void setYPNeighborID(const QString& yPNeighborID);
virtual EntityItemID getYPNeighborID() const;
virtual void setZPNeighborID(const EntityItemID& zPNeighborID);
void setZPNeighborID(const QString& zPNeighborID);
virtual EntityItemID getZPNeighborID() const;
virtual void rebakeMesh() {};

View file

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

View file

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

View file

@ -208,10 +208,12 @@ ShapeType ZoneEntityItem::getShapeType() const {
}
void ZoneEntityItem::setCompoundShapeURL(const QString& url) {
_compoundShapeURL = url;
if (_compoundShapeURL.isEmpty() && _shapeType == SHAPE_TYPE_COMPOUND) {
_shapeType = DEFAULT_SHAPE_TYPE;
}
withWriteLock([&] {
_compoundShapeURL = url;
if (_compoundShapeURL.isEmpty() && _shapeType == SHAPE_TYPE_COMPOUND) {
_shapeType = DEFAULT_SHAPE_TYPE;
}
});
}
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) {
_filterURL = url;
withWriteLock([&] {
_filterURL = url;
});
if (DependencyManager::isSet<EntityEditFilters>()) {
auto entityEditFilters = DependencyManager::get<EntityEditFilters>();
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; }
virtual ShapeType getShapeType() const override;
virtual bool hasCompoundShapeURL() const { return !_compoundShapeURL.isEmpty(); }
const QString getCompoundShapeURL() const { return _compoundShapeURL; }
virtual bool hasCompoundShapeURL() const;
QString getCompoundShapeURL() const;
virtual void setCompoundShapeURL(const QString& url);
const KeyLightPropertyGroup& getKeyLightProperties() const { return _keyLightProperties; }
@ -74,7 +74,7 @@ public:
void setFlyingAllowed(bool value) { _flyingAllowed = value; }
bool getGhostingAllowed() const { return _ghostingAllowed; }
void setGhostingAllowed(bool value) { _ghostingAllowed = value; }
QString getFilterURL() const { return _filterURL; }
QString getFilterURL() const;
void setFilterURL(const QString url);
virtual bool supportsDetailedRayIntersection() const override { return true; }