Fix the main component so it doesn't load the View3D instance unless it'll actually be rendered
This commit is contained in:
parent
cceed0f856
commit
0cbc54bd04
|
|
@ -1,33 +1,11 @@
|
||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick3D
|
import QtQuick3D
|
||||||
import org.kde.kwin as KWinComponents
|
|
||||||
|
|
||||||
|
|
||||||
Node {
|
Node {
|
||||||
readonly property var supportedModels: [
|
|
||||||
"VITURE",
|
|
||||||
"nreal air",
|
|
||||||
"Air",
|
|
||||||
"Air 2",
|
|
||||||
"Air 2 Pro",
|
|
||||||
"Air 2 Ultra",
|
|
||||||
"SmartGlasses", // TCL/RayNeo
|
|
||||||
"Rokid Max",
|
|
||||||
"Rokid Air"
|
|
||||||
]
|
|
||||||
|
|
||||||
property real viewportDiagonalFOVDegrees: effect.diagonalFOV
|
|
||||||
property var viewportResolution: effect.displayResolution
|
property var viewportResolution: effect.displayResolution
|
||||||
property QtObject targetScreen
|
property var screens: root.screens
|
||||||
property bool targetScreenSupported: {
|
property var monitorPlacements: root.monitorPlacements
|
||||||
return supportedModels.some(function(model) {
|
|
||||||
return targetScreen.model.endsWith(model);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
property var screens: KWinComponents.Workspace.screens
|
|
||||||
// .filter(function(screen) {
|
|
||||||
// return supportedModels.includes(screen.model);
|
|
||||||
// })
|
|
||||||
|
|
||||||
// x value for placing the viewport in the middle of all screens
|
// x value for placing the viewport in the middle of all screens
|
||||||
property real screensXMid: {
|
property real screensXMid: {
|
||||||
|
|
@ -61,11 +39,6 @@ Node {
|
||||||
id: displays
|
id: displays
|
||||||
}
|
}
|
||||||
|
|
||||||
property var monitorPlacements: {
|
|
||||||
const fovDetails = displays.fovDetails(screens, viewportResolution[0], viewportResolution[1], viewportDiagonalFOVDegrees, effect.lensDistanceRatio);
|
|
||||||
const monitorSpacing = 0.0;
|
|
||||||
return displays.monitorsToPlacements(fovDetails, screens.map(screen => screen.geometry), monitorSpacing);
|
|
||||||
}
|
|
||||||
|
|
||||||
Repeater3D {
|
Repeater3D {
|
||||||
model: screens.length
|
model: screens.length
|
||||||
|
|
|
||||||
|
|
@ -8,44 +8,80 @@ Item {
|
||||||
antialiasing: true
|
antialiasing: true
|
||||||
focus: false
|
focus: false
|
||||||
|
|
||||||
|
readonly property var supportedModels: [
|
||||||
|
"VITURE",
|
||||||
|
"nreal air",
|
||||||
|
"Air",
|
||||||
|
"Air 2",
|
||||||
|
"Air 2 Pro",
|
||||||
|
"Air 2 Ultra",
|
||||||
|
"SmartGlasses", // TCL/RayNeo
|
||||||
|
"Rokid Max",
|
||||||
|
"Rokid Air"
|
||||||
|
]
|
||||||
required property QtObject effect
|
required property QtObject effect
|
||||||
required property QtObject targetScreen
|
required property QtObject targetScreen
|
||||||
|
|
||||||
DesktopView {
|
property real viewportDiagonalFOVDegrees: effect.diagonalFOV
|
||||||
id: desktopView
|
property var viewportResolution: effect.displayResolution
|
||||||
screen: root.targetScreen
|
property var screens: KWinComponents.Workspace.screens
|
||||||
width: root.targetScreen.geometry.width
|
// .filter(function(screen) {
|
||||||
height: root.targetScreen.geometry.height
|
// return supportedModels.includes(screen.model);
|
||||||
|
// })
|
||||||
|
|
||||||
|
Displays {
|
||||||
|
id: displays
|
||||||
}
|
}
|
||||||
|
|
||||||
View3D {
|
property var monitorPlacements: {
|
||||||
id: view3D
|
const fovDetails = displays.fovDetails(screens, viewportResolution[0], viewportResolution[1], viewportDiagonalFOVDegrees, effect.lensDistanceRatio);
|
||||||
anchors.fill: parent
|
const monitorSpacing = 0.0;
|
||||||
environment: SceneEnvironment {
|
return displays.monitorsToPlacements(fovDetails, screens.map(screen => screen.geometry), monitorSpacing);
|
||||||
antialiasingMode: SceneEnvironment.MSAA
|
}
|
||||||
}
|
|
||||||
|
|
||||||
PerspectiveCamera {
|
Component {
|
||||||
id: camera
|
id: desktopViewComponent
|
||||||
frustumCullingEnabled: false
|
DesktopView {
|
||||||
|
screen: root.targetScreen
|
||||||
|
width: root.targetScreen.geometry.width
|
||||||
|
height: root.targetScreen.geometry.height
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BreezyDesktop {
|
Component {
|
||||||
id: breezyDesktop
|
id: view3DComponent
|
||||||
targetScreen: root.targetScreen
|
View3D {
|
||||||
}
|
|
||||||
|
|
||||||
CameraController {
|
|
||||||
id: cameraController
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
camera: camera
|
environment: SceneEnvironment {
|
||||||
|
antialiasingMode: SceneEnvironment.MSAA
|
||||||
|
}
|
||||||
|
|
||||||
|
PerspectiveCamera {
|
||||||
|
id: camera
|
||||||
|
frustumCullingEnabled: false
|
||||||
|
}
|
||||||
|
|
||||||
|
BreezyDesktop {
|
||||||
|
id: breezyDesktop
|
||||||
|
}
|
||||||
|
|
||||||
|
CameraController {
|
||||||
|
id: cameraController
|
||||||
|
anchors.fill: parent
|
||||||
|
camera: camera
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO - make it so the View3D isn't loaded unless it's a supported screen
|
Loader {
|
||||||
|
id: viewLoader
|
||||||
|
anchors.fill: parent
|
||||||
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
console.log(`Breezy - initialized with target screen: ${breezyDesktop.targetScreen.model}, supported: ${breezyDesktop.targetScreenSupported}`);
|
const targetScreenSupported = supportedModels.some(model => root.targetScreen.model.endsWith(model));
|
||||||
view3D.opacity = breezyDesktop.targetScreenSupported ? 1.0 : 0.0;
|
console.log(`Breezy - initialized with target screen: ${root.targetScreen.model}, supported: ${targetScreenSupported}`);
|
||||||
desktopView.opacity = breezyDesktop.targetScreenSupported ? 0.0 : 1.0;
|
|
||||||
|
viewLoader.sourceComponent = targetScreenSupported ? view3DComponent : desktopViewComponent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue