Fix the main component so it doesn't load the View3D instance unless it'll actually be rendered

This commit is contained in:
wheaney 2025-07-31 21:50:01 -07:00
parent cceed0f856
commit 0cbc54bd04
2 changed files with 64 additions and 55 deletions

View File

@ -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

View File

@ -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 {
id: camera
frustumCullingEnabled: false
}
BreezyDesktop { Component {
id: breezyDesktop id: desktopViewComponent
targetScreen: root.targetScreen DesktopView {
screen: root.targetScreen
width: root.targetScreen.geometry.width
height: root.targetScreen.geometry.height
} }
}
CameraController { Component {
id: cameraController id: view3DComponent
View3D {
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
}
} }
} }
Loader {
id: viewLoader
anchors.fill: parent
}
// TODO - make it so the View3D isn't loaded unless it's a supported screen
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;
} }
} }