mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 16:41:02 +02:00
More thread safety
This commit is contained in:
parent
cd7c1643a3
commit
15f7e895aa
8 changed files with 207 additions and 50 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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() {};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
Loading…
Reference in a new issue