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,18 +8,49 @@ 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
property real viewportDiagonalFOVDegrees: effect.diagonalFOV
property var viewportResolution: effect.displayResolution
property var screens: KWinComponents.Workspace.screens
// .filter(function(screen) {
// return supportedModels.includes(screen.model);
// })
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);
}
Component {
id: desktopViewComponent
DesktopView { DesktopView {
id: desktopView
screen: root.targetScreen screen: root.targetScreen
width: root.targetScreen.geometry.width width: root.targetScreen.geometry.width
height: root.targetScreen.geometry.height height: root.targetScreen.geometry.height
} }
}
Component {
id: view3DComponent
View3D { View3D {
id: view3D
anchors.fill: parent anchors.fill: parent
environment: SceneEnvironment { environment: SceneEnvironment {
antialiasingMode: SceneEnvironment.MSAA antialiasingMode: SceneEnvironment.MSAA
@ -32,7 +63,6 @@ Item {
BreezyDesktop { BreezyDesktop {
id: breezyDesktop id: breezyDesktop
targetScreen: root.targetScreen
} }
CameraController { CameraController {
@ -41,11 +71,17 @@ Item {
camera: camera 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;
} }
} }