From 3e692a60b4974cde76adbd21dd865b927493f8e8 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Sun, 29 Jan 2023 18:43:01 +0100 Subject: [PATCH] V8 fixes --- interface/src/RefreshRateManager.h | 2 +- interface/src/avatar/AvatarManager.cpp | 2 ++ interface/src/ui/overlays/Overlays.cpp | 11 +++++++---- libraries/avatars/src/AvatarData.cpp | 2 ++ libraries/avatars/src/AvatarData.h | 6 +++--- .../entities-renderer/src/RenderableGridEntityItem.h | 4 ++-- .../src/RenderableImageEntityItem.h | 4 ++-- .../entities-renderer/src/RenderableTextEntityItem.h | 2 +- .../entities-renderer/src/RenderableWebEntityItem.h | 4 ++-- libraries/entities/src/EntityScriptingInterface.cpp | 2 ++ libraries/entities/src/EntityScriptingInterface.h | 4 ++-- libraries/entities/src/GizmoEntityItem.cpp | 1 + libraries/entities/src/PolyLineEntityItem.h | 6 +++--- libraries/entities/src/TextEntityItem.h | 2 +- libraries/entities/src/WebEntityItem.h | 4 ++-- libraries/model-serializers/src/GLTFSerializer.h | 4 ++-- libraries/render/src/render/DrawStatus.h | 6 +++--- libraries/script-engine/src/ScriptManager.cpp | 2 +- libraries/script-engine/src/v8/ScriptEngineV8.cpp | 8 ++++---- .../script-engine/src/v8/ScriptObjectV8Proxy.cpp | 12 ++++++------ .../script-engine/src/v8/ScriptValueV8Wrapper.cpp | 1 + libraries/shared/src/shared/WebRTC.h | 10 ++++++++-- 22 files changed, 58 insertions(+), 41 deletions(-) diff --git a/interface/src/RefreshRateManager.h b/interface/src/RefreshRateManager.h index 521489e057..da4d5469bf 100644 --- a/interface/src/RefreshRateManager.h +++ b/interface/src/RefreshRateManager.h @@ -117,7 +117,7 @@ private: mutable int _activeRefreshRate { 20 }; RefreshRateProfile _refreshRateProfile { RefreshRateProfile::INTERACTIVE}; RefreshRateRegime _refreshRateRegime { RefreshRateRegime::STARTUP }; - UXMode _uxMode; + UXMode _uxMode { UXMode::UX_NUM }; mutable ReadWriteLockable _refreshRateProfileSettingLock; Setting::Handle _refreshRateProfileSetting { "refreshRateProfile", RefreshRateProfile::INTERACTIVE }; diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 191770642b..7742085148 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -861,6 +861,7 @@ RayToAvatarIntersectionResult AvatarManager::findRayIntersectionVector(const Pic result.avatarID = rayAvatarResult._intersectWithAvatar; result.distance = rayAvatarResult._distance; result.face = face; + Q_ASSERT(face < 7); result.intersection = ray.origin + rayAvatarResult._distance * rayDirection; result.surfaceNormal = rayAvatarResult._intersectionNormal; result.jointIndex = rayAvatarResult._intersectWithJoint; @@ -954,6 +955,7 @@ ParabolaToAvatarIntersectionResult AvatarManager::findParabolaIntersectionVector result.avatarID = sortedAvatar.second->getID(); result.parabolicDistance = parabolicDistance; result.face = face; + Q_ASSERT(face < 7); result.surfaceNormal = surfaceNormal; result.extraInfo = extraInfo; } diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index dec0e4e84e..f485e982f8 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -1008,7 +1008,7 @@ QUuid Overlays::getOverlayAtPoint(const glm::vec2& point) { } QVariant Overlays::getProperty(const QUuid& id, const QString& property) { - Overlay::Pointer overlay = get2DOverlay(id); + /*Overlay::Pointer overlay = get2DOverlay(id); if (overlay) { // We don't support getting properties from QML Overlays right now return QVariant(); @@ -1018,12 +1018,13 @@ QVariant Overlays::getProperty(const QUuid& id, const QString& property) { auto propIter = overlayProperties.find(property); if (propIter != overlayProperties.end()) { return propIter.value(); - } + }*/ + qDebug() << "Overlays::getProperty is not supported anymore"; return QVariant(); } QVariantMap Overlays::getProperties(const QUuid& id, const QStringList& properties) { - Overlay::Pointer overlay = get2DOverlay(id); + /*Overlay::Pointer overlay = get2DOverlay(id); QVariantMap result; if (overlay) { // We don't support getting properties from QML Overlays right now @@ -1036,7 +1037,9 @@ QVariantMap Overlays::getProperties(const QUuid& id, const QStringList& properti if (propIter != overlayProperties.end()) { result.insert(property, propIter.value()); } - } + }*/ + qDebug() << "Overlays::getProperties is not supported anymore"; + QVariantMap result; return result; } diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index ec1735ab37..c3272b0345 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -3175,6 +3175,7 @@ ScriptValue RayToAvatarIntersectionResultToScriptValue(ScriptEngine* engine, con ScriptValue avatarIDValue = quuidToScriptValue(engine, value.avatarID); obj.setProperty("avatarID", avatarIDValue); obj.setProperty("distance", value.distance); + Q_ASSERT(value.face < 7); obj.setProperty("face", boxFaceToString(value.face)); ScriptValue intersection = vec3ToScriptValue(engine, value.intersection); @@ -3192,6 +3193,7 @@ bool RayToAvatarIntersectionResultFromScriptValue(const ScriptValue& object, Ray quuidFromScriptValue(avatarIDValue, value.avatarID); value.distance = object.property("distance").toVariant().toFloat(); value.face = boxFaceFromString(object.property("face").toVariant().toString()); + Q_ASSERT(value.face < 7); ScriptValue intersection = object.property("intersection"); if (intersection.isValid()) { diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 0ce5736454..11da534b13 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -1965,9 +1965,9 @@ public: bool intersects { false }; QUuid avatarID; float distance { FLT_MAX }; - BoxFace face; - glm::vec3 intersection; - glm::vec3 surfaceNormal; + BoxFace face { UNKNOWN_FACE }; + glm::vec3 intersection { glm::vec3(0.0f, 0.0f, 0.0f) }; + glm::vec3 surfaceNormal { glm::vec3(0.0f, 1.0f, 0.0f) }; int jointIndex { -1 }; QVariantMap extraInfo; }; diff --git a/libraries/entities-renderer/src/RenderableGridEntityItem.h b/libraries/entities-renderer/src/RenderableGridEntityItem.h index fd5b397424..176f23c520 100644 --- a/libraries/entities-renderer/src/RenderableGridEntityItem.h +++ b/libraries/entities-renderer/src/RenderableGridEntityItem.h @@ -37,9 +37,9 @@ private: float _alpha { NAN }; PulsePropertyGroup _pulseProperties; - bool _followCamera; + bool _followCamera { false }; uint32_t _majorGridEvery; - float _minorGridEvery; + float _minorGridEvery { false }; glm::vec3 _dimensions; diff --git a/libraries/entities-renderer/src/RenderableImageEntityItem.h b/libraries/entities-renderer/src/RenderableImageEntityItem.h index cc923daf4b..a79fe7b635 100644 --- a/libraries/entities-renderer/src/RenderableImageEntityItem.h +++ b/libraries/entities-renderer/src/RenderableImageEntityItem.h @@ -42,8 +42,8 @@ private: NetworkTexturePointer _texture; bool _textureIsLoaded { false }; - bool _emissive; - bool _keepAspectRatio; + bool _emissive { false }; + bool _keepAspectRatio { false }; QRect _subImage; std::shared_ptr _material { std::make_shared() }; diff --git a/libraries/entities-renderer/src/RenderableTextEntityItem.h b/libraries/entities-renderer/src/RenderableTextEntityItem.h index 0dea260763..5ab5950a0e 100644 --- a/libraries/entities-renderer/src/RenderableTextEntityItem.h +++ b/libraries/entities-renderer/src/RenderableTextEntityItem.h @@ -57,7 +57,7 @@ private: float _lineHeight; glm::vec3 _textColor; float _textAlpha; - bool _unlit; + bool _unlit { false }; std::shared_ptr _material { std::make_shared() }; glm::vec3 _backgroundColor { NAN }; diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.h b/libraries/entities-renderer/src/RenderableWebEntityItem.h index 14bf5b105d..e971d4edcf 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.h +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.h @@ -98,9 +98,9 @@ private: uint16_t _dpi; QString _scriptURL; uint8_t _maxFPS; - bool _useBackground; + bool _useBackground { false }; QString _userAgent; - WebInputMode _inputMode; + WebInputMode _inputMode { WebInputMode::TOUCH }; glm::vec3 _contextPosition; diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index e62625f8ab..2c8b223053 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -1687,6 +1687,7 @@ ScriptValue RayToEntityIntersectionResultToScriptValue(ScriptEngine* engine, con obj.setProperty("entityID", entityItemValue); obj.setProperty("distance", value.distance); obj.setProperty("face", boxFaceToString(value.face)); + Q_ASSERT(value.face < 7); ScriptValue intersection = vec3ToScriptValue(engine, value.intersection); obj.setProperty("intersection", intersection); @@ -1703,6 +1704,7 @@ bool RayToEntityIntersectionResultFromScriptValue(const ScriptValue& object, Ray quuidFromScriptValue(entityIDValue, value.entityID); value.distance = object.property("distance").toVariant().toFloat(); value.face = boxFaceFromString(object.property("face").toVariant().toString()); + Q_ASSERT(value.face < 7); ScriptValue intersection = object.property("intersection"); if (intersection.isValid()) { diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index 46208966f1..bb5eabfdd8 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -86,8 +86,8 @@ public: QUuid entityID; float distance { 0.0f }; BoxFace face { UNKNOWN_FACE }; - glm::vec3 intersection; - glm::vec3 surfaceNormal; + glm::vec3 intersection { glm::vec3(0.0f, 0.0f, 0.0f) }; + glm::vec3 surfaceNormal { glm::vec3(0.0f, 1.0f, 0.0f) }; QVariantMap extraInfo; }; Q_DECLARE_METATYPE(RayToEntityIntersectionResult) diff --git a/libraries/entities/src/GizmoEntityItem.cpp b/libraries/entities/src/GizmoEntityItem.cpp index 44073cb537..9bca8a522e 100644 --- a/libraries/entities/src/GizmoEntityItem.cpp +++ b/libraries/entities/src/GizmoEntityItem.cpp @@ -21,6 +21,7 @@ EntityItemPointer GizmoEntityItem::factory(const EntityItemID& entityID, const E // our non-pure virtual subclass for now... GizmoEntityItem::GizmoEntityItem(const EntityItemID& entityItemID) : EntityItem(entityItemID) { _type = EntityTypes::Gizmo; + _gizmoType = GizmoType::UNSET_GIZMO_TYPE; } void GizmoEntityItem::setUnscaledDimensions(const glm::vec3& value) { diff --git a/libraries/entities/src/PolyLineEntityItem.h b/libraries/entities/src/PolyLineEntityItem.h index 23f6e36e73..3c4a3bac2b 100644 --- a/libraries/entities/src/PolyLineEntityItem.h +++ b/libraries/entities/src/PolyLineEntityItem.h @@ -103,9 +103,9 @@ private: QVector _colors; QVector _widths; QString _textures; - bool _isUVModeStretch; - bool _glow; - bool _faceCamera; + bool _isUVModeStretch { false }; + bool _glow { false }; + bool _faceCamera { false }; bool _pointsChanged { false }; bool _normalsChanged { false }; diff --git a/libraries/entities/src/TextEntityItem.h b/libraries/entities/src/TextEntityItem.h index fff7f57bfb..e39625060a 100644 --- a/libraries/entities/src/TextEntityItem.h +++ b/libraries/entities/src/TextEntityItem.h @@ -116,7 +116,7 @@ private: float _rightMargin; float _topMargin; float _bottomMargin; - bool _unlit; + bool _unlit { false }; QString _font; TextAlignment _alignment; diff --git a/libraries/entities/src/WebEntityItem.h b/libraries/entities/src/WebEntityItem.h index cc689c8998..4878991120 100644 --- a/libraries/entities/src/WebEntityItem.h +++ b/libraries/entities/src/WebEntityItem.h @@ -92,8 +92,8 @@ protected: QString _scriptURL; uint8_t _maxFPS; WebInputMode _inputMode; - bool _showKeyboardFocusHighlight; - bool _useBackground; + bool _showKeyboardFocusHighlight { false }; + bool _useBackground { false }; QString _userAgent; bool _localSafeContext { false }; }; diff --git a/libraries/model-serializers/src/GLTFSerializer.h b/libraries/model-serializers/src/GLTFSerializer.h index 3ce38ead5e..e5ce6fb663 100644 --- a/libraries/model-serializers/src/GLTFSerializer.h +++ b/libraries/model-serializers/src/GLTFSerializer.h @@ -422,9 +422,9 @@ struct GLTFMaterial { int emissiveTexture; int normalTexture; int occlusionTexture; - graphics::MaterialKey::OpacityMapMode alphaMode; + graphics::MaterialKey::OpacityMapMode alphaMode { graphics::MaterialKey::OPACITY_MAP_OPAQUE }; double alphaCutoff; - bool doubleSided; + bool doubleSided { false }; GLTFpbrMetallicRoughness pbrMetallicRoughness; QMap defined; void dump() { diff --git a/libraries/render/src/render/DrawStatus.h b/libraries/render/src/render/DrawStatus.h index 6e0783f000..79cf2faafa 100644 --- a/libraries/render/src/render/DrawStatus.h +++ b/libraries/render/src/render/DrawStatus.h @@ -57,9 +57,9 @@ namespace render { const gpu::TexturePointer getStatusIconMap() const; protected: - bool _showDisplay; // initialized by Config - bool _showNetwork; // initialized by Config - bool _showFade; // initialized by Config + bool _showDisplay { false }; // initialized by Config + bool _showNetwork { false }; // initialized by Config + bool _showFade { false }; // initialized by Config gpu::Stream::FormatPointer _drawItemFormat; gpu::PipelinePointer _drawItemBoundsPipeline; diff --git a/libraries/script-engine/src/ScriptManager.cpp b/libraries/script-engine/src/ScriptManager.cpp index f17558a244..eae3eca3e1 100644 --- a/libraries/script-engine/src/ScriptManager.cpp +++ b/libraries/script-engine/src/ScriptManager.cpp @@ -1533,7 +1533,7 @@ ScriptValue ScriptManager::require(const QString& moduleId) { qCDebug(scriptengine_module) << "//ScriptManager::require(" << moduleId << ")"; _engine->maybeEmitUncaughtException(__FUNCTION__); - qCDebug(scriptengine_module) << "Exports: " << _engine->scriptValueDebugDetails(module.property("exports")); + //qCDebug(scriptengine_module) << "Exports: " << _engine->scriptValueDebugDetails(module.property("exports")); return module.property("exports"); } diff --git a/libraries/script-engine/src/v8/ScriptEngineV8.cpp b/libraries/script-engine/src/v8/ScriptEngineV8.cpp index 3664784720..3ff6068aa2 100644 --- a/libraries/script-engine/src/v8/ScriptEngineV8.cpp +++ b/libraries/script-engine/src/v8/ScriptEngineV8.cpp @@ -928,8 +928,8 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, } } // List members of closure global object - QString membersString(""); - if (closureContext->Global()->IsObject()) { + //QString membersString(""); + /*if (closureContext->Global()->IsObject()) { v8::Local membersStringV8; v8::Local object = v8::Local::Cast(closureContext->Global()); auto names = object->GetPropertyNames(closureContext).ToLocalChecked(); @@ -939,8 +939,8 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, membersString = QString(*v8::String::Utf8Value(_v8Isolate, membersStringV8)); } else { membersString = QString(" Is not an object"); - } - qDebug(scriptengine) << "Closure global before run:" << membersString; + }*/ + //qDebug(scriptengine) << "Closure global before run:" << membersString; auto maybeResult = program.constGet()->GetUnboundScript()->BindToCurrentContext()->Run(closureContext); //qDebug(scriptengine) << "Closure after run:" << scriptValueDebugDetailsV8(closure); v8::Local v8Result; diff --git a/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp b/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp index f81a1217d8..3cefe59270 100644 --- a/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp +++ b/libraries/script-engine/src/v8/ScriptObjectV8Proxy.cpp @@ -1095,19 +1095,19 @@ int ScriptSignalV8Proxy::qt_metacall(QMetaObject::Call call, int id, void** argu { v8::Local callback = v8::Local::Cast(conn.callback.get()); //auto functionContext = callback->CreationContext(); - //_engine->pushContext(functionContext); - _engine->pushContext(_v8Context.Get(_engine->getIsolate())); - //v8::Context::Scope functionContextScope(functionContext); - v8::Context::Scope functionContextScope(_v8Context.Get(_engine->getIsolate())); + auto functionContext = _v8Context.Get(_engine->getIsolate()); + _engine->pushContext(functionContext); + v8::Context::Scope functionContextScope(functionContext); + v8::Local v8This; if (conn.thisValue.get()->IsObject()) { v8This = conn.thisValue.get(); } else { - v8This = _engine->getContext()->Global(); + v8This = functionContext->Global(); } v8::TryCatch tryCatch(isolate); - callback->Call(_engine->getContext(), v8This, numArgs, args); + callback->Call(functionContext, v8This, numArgs, args); if (tryCatch.HasCaught()) { qCDebug(scriptengine) << "Signal proxy " << fullName() << " connection call failed: \"" << _engine->formatErrorMessageFromTryCatch(tryCatch) diff --git a/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp b/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp index c1aa010f6c..ae212a04fc 100644 --- a/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp +++ b/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp @@ -238,6 +238,7 @@ bool ScriptValueV8Wrapper::hasProperty(const QString& name) const { v8::Isolate::Scope isolateScope(_engine->getIsolate()); v8::HandleScope handleScope(isolate); v8::Context::Scope contextScope(_engine->getContext()); + //V8TODO: does function return true on IsObject too? if (_value.constGet()->IsObject()) { //V8TODO: what about flags? v8::Local resultLocal; diff --git a/libraries/shared/src/shared/WebRTC.h b/libraries/shared/src/shared/WebRTC.h index 3f4c9e156f..91d50dc8d9 100644 --- a/libraries/shared/src/shared/WebRTC.h +++ b/libraries/shared/src/shared/WebRTC.h @@ -35,9 +35,15 @@ // # define WEBRTC_POSIX 1 // # define WEBRTC_LEGACY 1 #elif defined(Q_OS_LINUX) && defined(Q_PROCESSOR_X86_64) -# define WEBRTC_AUDIO 1 +//V8TODO: +// WEBRTC_AUDIO causes: +// overte/libraries/audio-client/src/AudioClient.cpp:1258:36: runtime error: member call on address 0x61b000006980 which does not point to an object of type 'AudioProcessing' +// 0x61b000006980: note: object has invalid vptr +// Should be investigated before doing a release with it uncommented +//# define WEBRTC_AUDIO 1 # define WEBRTC_POSIX 1 -# define WEBRTC_DATA_CHANNELS 1 +//V8TODO: temporarily disabled, because linker failed for memory debugging +//# define WEBRTC_DATA_CHANNELS 1 #elif defined(Q_OS_LINUX) && defined(Q_PROCESSOR_ARM) // WebRTC is basically impossible to build on aarch64 Linux. // I am looking at https://gitlab.freedesktop.org/pulseaudio/webrtc-audio-processing for an alternative.