aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGrigorii Zimin <gzimin@luxoft.com>2020-08-17 17:37:39 +0300
committerGrigorii Zimin <gzimin@luxoft.com>2020-08-19 10:28:45 +0000
commitc159026a7ae4106d218cc542c30ab6cba11c629b (patch)
treeaacda949ae4809846c4275089decb26959aa3dca
parentdea8a42685b46e9ee63a4c54a39f77ded273e78b (diff)
[vehicle] fix segfaults in SP mode
Fixes: AUTOSUITE-1607 Change-Id: Ib1d628a495611aca952a1ea3acba6e23f2101894 Reviewed-by: Svetlana Abramenkova <sabramenkova@luxoft.com> Reviewed-by: Egor Nemtsev <enemtsev@luxoft.com>
-rw-r--r--apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml22
-rw-r--r--apps/com.luxoft.vehicle/views/VehicleView.qml45
2 files changed, 55 insertions, 12 deletions
diff --git a/apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml b/apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml
index bb8efe47..1c0068ff 100644
--- a/apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml
+++ b/apps/com.luxoft.vehicle/panels/Vehicle3DPanel.qml
@@ -78,6 +78,14 @@ Item {
return angle * 180 / Math.PI;
}
+ function forceRedraw() {
+ // force scene to redraw (workaround for AUTOSUITE-1598)
+ // see FrameAction below: we force render policy to be 'Always' for at least 5 seconds
+ // this time should be enough to make model shown
+ // after this we set renderPolicy back to OnDemand to reduce cpu consuming
+ renderSettings.renderPolicy = RenderSettings.Always;
+ }
+
MouseArea {
anchors.top: parent.top
anchors.left: parent.left
@@ -137,6 +145,16 @@ Item {
FrameAction {
id: frameCounter
+ property real dtime: 0.0
+ onTriggered: {
+ if (renderSettings.renderPolicy === RenderSettings.Always) {
+ dtime += dt;
+ if (dtime > 5.0) {
+ dtime = 0;
+ renderSettings.renderPolicy = RenderSettings.OnDemand;
+ }
+ }
+ }
}
components: [inputSettings, renderSettings, frameCounter]
@@ -149,9 +167,7 @@ Item {
function onTriggered() {
if (++fc == 3) {
root.readyToChanges = true;
- // force scene to redraw (workaround for AUTOSUITE-1598)
- renderSettings.renderPolicy = RenderSettings.Always;
- renderSettings.renderPolicy = RenderSettings.OnDemand;
+ root.forceRedraw();
}
}
}
diff --git a/apps/com.luxoft.vehicle/views/VehicleView.qml b/apps/com.luxoft.vehicle/views/VehicleView.qml
index 929107c7..04f857ee 100644
--- a/apps/com.luxoft.vehicle/views/VehicleView.qml
+++ b/apps/com.luxoft.vehicle/views/VehicleView.qml
@@ -45,6 +45,10 @@ Item {
id: root
property VehicleStore store
+
+ // This timer is used to make the order of creation transparent
+ // 1) read settings (reread to be sure, it's a synch op), get chosen runtime
+ // 2) load the chosen model
Timer {
id: delayTimer
interval: 1
@@ -55,12 +59,35 @@ Item {
}
}
+ // This timer is a workaround to prevent 3DStudio presentation from too fast reload
+ Timer {
+ id: studioReloadTimer
+ interval: 2000
+ running: false
+ onTriggered: {
+ loadVehiclePanel();
+ }
+ }
+
+ // we don't change visible manually, it is changed by sysui, when another app is called
+ // or the same app is called again, even if it is maximized right now
onVisibleChanged: {
- if (!visible) {
- vehicle3DPanelLoader.active = false;
- } else {
- if (!delayTimer.running && !vehicle3DPanelLoader.active)
- loadVehiclePanel();
+ // the app was already launched and is restored (e.g. Vehicle -> Home -> Vehicle)
+ if (root.store.runtime3D === "qt3d") {
+ if (visible && !!vehicle3DPanelLoader.item) {
+ // vehicle is loaded, but it is hidden (AUTOSUITE-1598)
+ // we force redraw, to make it visible
+ vehicle3DPanelLoader.item.forceRedraw();
+ }
+ } else if (root.store.runtime3D === "3DStudio") {
+ if (!visible && !!vehicle3DPanelLoader.item) {
+ vehicle3DPanelLoader.source = "" // force to remove current instance
+ }
+
+ if (visible) {
+ vehicleProxyPanel.opacity = 1.0; // enable proxy with the progress bar
+ studioReloadTimer.start();
+ }
}
}
@@ -71,11 +98,11 @@ Item {
? "../panels/Vehicle3DPanel.qml" : "../panels/Vehicle3DStudioPanel.qml"
, {
"leftDoorOpen": root.store.leftDoorOpened
- , "rightDoorOpen": root.store.rightDoorOpen
- , "trunkOpen": root.store.trunkOpen
+ , "rightDoorOpen": root.store.rightDoorOpened
+ , "trunkOpen": root.store.trunkOpened
, "roofOpenProgress": root.store.roofOpenProgress
- , "lastCameraAngle": root.store.lastCameraAngle
- , "modelVersion": root.store.modelVersion
+ , "lastCameraAngle": root.store.cameraAngleView
+ , "modelVersion": root.store.model3DVersion
, "vehicleColor": root.store.vehicle3DstudioColor
});
vehicle3DPanelLoader.active = store.allowOpenGLContent;