Fix the remaining display size issues in GNOME, v2.6.0
This commit is contained in:
parent
100ecac21b
commit
ac53ff2298
|
|
@ -59,6 +59,9 @@ cp -r $VULKAN_DIR/config $PACKAGE_DIR
|
||||||
|
|
||||||
# build XR driver
|
# build XR driver
|
||||||
XR_DRIVER_BINARY=$XR_DRIVER_DIR/out/xrDriver-$ARCH.tar.gz
|
XR_DRIVER_BINARY=$XR_DRIVER_DIR/out/xrDriver-$ARCH.tar.gz
|
||||||
|
if [ -n "$STEAMOS" ]; then
|
||||||
|
XR_DRIVER_BINARY=$XR_DRIVER_DIR/out/xrDriver-$ARCH.steamos.tar.gz
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! -e "$XR_DRIVER_BINARY" ] || [ "$1" == "--rebuild-driver" ]; then
|
if [ ! -e "$XR_DRIVER_BINARY" ] || [ "$1" == "--rebuild-driver" ]; then
|
||||||
# if a file exists at custom_banner_config.yml, copy it to the xrealAirLinuxDriver directory
|
# if a file exists at custom_banner_config.yml, copy it to the xrealAirLinuxDriver directory
|
||||||
|
|
@ -71,6 +74,9 @@ if [ ! -e "$XR_DRIVER_BINARY" ] || [ "$1" == "--rebuild-driver" ]; then
|
||||||
# strange issue where the base library produces a .so file if the build is not cleaned
|
# strange issue where the base library produces a .so file if the build is not cleaned
|
||||||
rm -rf build/
|
rm -rf build/
|
||||||
|
|
||||||
|
if [ -n "${STEAMOS:-}" ]; then
|
||||||
|
export STEAMOS
|
||||||
|
fi
|
||||||
docker-build/init.sh
|
docker-build/init.sh
|
||||||
docker-build/run-build.sh $ARCH
|
docker-build/run-build.sh $ARCH
|
||||||
popd
|
popd
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@ function createVertexMesh(fovDetails, monitorDetails, positionVectorNWU) {
|
||||||
let fovConversions = fovDetails.curvedDisplay ? fovConversionFns.curved : fovConversionFns.flat;
|
let fovConversions = fovDetails.curvedDisplay ? fovConversionFns.curved : fovConversionFns.flat;
|
||||||
const sideEdgeDistancePixels = fovConversions.centerToFovEdgeDistance(
|
const sideEdgeDistancePixels = fovConversions.centerToFovEdgeDistance(
|
||||||
fovDetails.completeScreenDistancePixels,
|
fovDetails.completeScreenDistancePixels,
|
||||||
fovDetails.widthPixels
|
fovDetails.sizeAdjustedWidthPixels
|
||||||
);
|
);
|
||||||
const horizontalRadians = fovConversions.lengthToRadians(
|
const horizontalRadians = fovConversions.lengthToRadians(
|
||||||
fovDetails.defaultDistanceHorizontalRadians,
|
fovDetails.defaultDistanceHorizontalRadians,
|
||||||
|
|
@ -42,7 +42,7 @@ function createVertexMesh(fovDetails, monitorDetails, positionVectorNWU) {
|
||||||
|
|
||||||
const topEdgeDistancePixels = fovConversions.centerToFovEdgeDistance(
|
const topEdgeDistancePixels = fovConversions.centerToFovEdgeDistance(
|
||||||
fovDetails.completeScreenDistancePixels,
|
fovDetails.completeScreenDistancePixels,
|
||||||
fovDetails.heightPixels
|
fovDetails.sizeAdjustedHeightPixels
|
||||||
);
|
);
|
||||||
const verticalRadians = fovConversions.lengthToRadians(
|
const verticalRadians = fovConversions.lengthToRadians(
|
||||||
fovDetails.defaultDistanceVerticalRadians,
|
fovDetails.defaultDistanceVerticalRadians,
|
||||||
|
|
@ -585,7 +585,7 @@ export const VirtualDisplayEffect = GObject.registerClass({
|
||||||
this.set_uniform_float(this.get_uniform_location('u_look_ahead_ms'), 1, [0.0]);
|
this.set_uniform_float(this.get_uniform_location('u_look_ahead_ms'), 1, [0.0]);
|
||||||
lookAheadSet = true;
|
lookAheadSet = true;
|
||||||
}
|
}
|
||||||
const posePositionPixels = this.imu_snapshots.pose_position.map(coord => coord * this.fov_details.completeScreenDistancePixels);
|
const posePositionPixels = this.imu_snapshots.pose_position.map(coord => coord * this.fov_details.fullScreenDistancePixels);
|
||||||
this.set_uniform_matrix(this.get_uniform_location("u_pose_orientation"), false, 4, this.imu_snapshots.pose_orientation);
|
this.set_uniform_matrix(this.get_uniform_location("u_pose_orientation"), false, 4, this.imu_snapshots.pose_orientation);
|
||||||
this.set_uniform_float(this.get_uniform_location("u_pose_position"), 3, posePositionPixels);
|
this.set_uniform_float(this.get_uniform_location("u_pose_position"), 3, posePositionPixels);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -206,8 +206,8 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
||||||
if (fovDetails.monitorWrappingScheme === 'horizontal') {
|
if (fovDetails.monitorWrappingScheme === 'horizontal') {
|
||||||
// monitors wrap around us horizontally
|
// monitors wrap around us horizontally
|
||||||
|
|
||||||
const sideEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.widthPixels);
|
const sideEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.sizeAdjustedWidthPixels);
|
||||||
const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels;
|
const monitorSpacingPixels = monitorSpacing * fovDetails.sizeAdjustedWidthPixels;
|
||||||
const lengthToRadianFn = (targetWidth) => conversionFns.lengthToRadians(
|
const lengthToRadianFn = (targetWidth) => conversionFns.lengthToRadians(
|
||||||
fovDetails.defaultDistanceHorizontalRadians,
|
fovDetails.defaultDistanceHorizontalRadians,
|
||||||
fovDetails.widthPixels,
|
fovDetails.widthPixels,
|
||||||
|
|
@ -215,14 +215,14 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
||||||
targetWidth
|
targetWidth
|
||||||
);
|
);
|
||||||
|
|
||||||
cachedMonitorRadians[0] = -fovDetails.defaultDistanceHorizontalRadians / 2;
|
cachedMonitorRadians[0] = -lengthToRadianFn(fovDetails.sizeAdjustedWidthPixels) / 2;
|
||||||
horizontalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
|
horizontalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
|
||||||
const monitorWrapDetails = monitorWrap(cachedMonitorRadians, monitorSpacingPixels, monitorDetails.x, monitorDetails.width, lengthToRadianFn);
|
const monitorWrapDetails = monitorWrap(cachedMonitorRadians, monitorSpacingPixels, monitorDetails.x, monitorDetails.width, lengthToRadianFn);
|
||||||
const monitorCenterRadius = conversionFns.fovEdgeToScreenCenterDistance(sideEdgeRadius, monitorDetails.width);
|
const monitorCenterRadius = conversionFns.fovEdgeToScreenCenterDistance(sideEdgeRadius, monitorDetails.width);
|
||||||
const upTopPixels = -monitorDetails.y - (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels;
|
const upTopPixels = -monitorDetails.y - (monitorDetails.y / fovDetails.sizeAdjustedHeightPixels) * monitorSpacingPixels;
|
||||||
|
|
||||||
// offset for aligning this monitor's center with the fov-sized viewport's center
|
// offset for aligning this monitor's center with the fov-sized viewport's center
|
||||||
const upCenterOffsetPixels = (monitorDetails.height - fovDetails.heightPixels) / 2;
|
const upCenterOffsetPixels = (monitorDetails.height - fovDetails.sizeAdjustedHeightPixels) / 2;
|
||||||
|
|
||||||
// this is where our monitor's center is in relation to an fov-sized viewport centered about (0, 0)
|
// this is where our monitor's center is in relation to an fov-sized viewport centered about (0, 0)
|
||||||
const upCenterPixels = upTopPixels - upCenterOffsetPixels;
|
const upCenterPixels = upTopPixels - upCenterOffsetPixels;
|
||||||
|
|
@ -257,8 +257,8 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
||||||
} else if (fovDetails.monitorWrappingScheme === 'vertical') {
|
} else if (fovDetails.monitorWrappingScheme === 'vertical') {
|
||||||
// monitors wrap around us vertically
|
// monitors wrap around us vertically
|
||||||
|
|
||||||
const topEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.heightPixels);
|
const topEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.sizeAdjustedHeightPixels);
|
||||||
const monitorSpacingPixels = monitorSpacing * fovDetails.heightPixels;
|
const monitorSpacingPixels = monitorSpacing * fovDetails.sizeAdjustedHeightPixels;
|
||||||
const lengthToRadianFn = (targetHeight) => conversionFns.lengthToRadians(
|
const lengthToRadianFn = (targetHeight) => conversionFns.lengthToRadians(
|
||||||
fovDetails.defaultDistanceVerticalRadians,
|
fovDetails.defaultDistanceVerticalRadians,
|
||||||
fovDetails.heightPixels,
|
fovDetails.heightPixels,
|
||||||
|
|
@ -266,14 +266,14 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
||||||
targetHeight
|
targetHeight
|
||||||
);
|
);
|
||||||
|
|
||||||
cachedMonitorRadians[0] = -fovDetails.defaultDistanceVerticalRadians / 2;
|
cachedMonitorRadians[0] = -lengthToRadianFn(fovDetails.sizeAdjustedHeightPixels) / 2;
|
||||||
verticalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
|
verticalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
|
||||||
const monitorWrapDetails = monitorWrap(cachedMonitorRadians, monitorSpacingPixels, monitorDetails.y, monitorDetails.height, lengthToRadianFn);
|
const monitorWrapDetails = monitorWrap(cachedMonitorRadians, monitorSpacingPixels, monitorDetails.y, monitorDetails.height, lengthToRadianFn);
|
||||||
const monitorCenterRadius = conversionFns.fovEdgeToScreenCenterDistance(topEdgeRadius, monitorDetails.height);
|
const monitorCenterRadius = conversionFns.fovEdgeToScreenCenterDistance(topEdgeRadius, monitorDetails.height);
|
||||||
const westLeftPixels = -monitorDetails.x - (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels;
|
const westLeftPixels = -monitorDetails.x - (monitorDetails.x / fovDetails.sizeAdjustedWidthPixels) * monitorSpacingPixels;
|
||||||
|
|
||||||
// offset for aligning this monitor's center with the fov-sized viewport's center
|
// offset for aligning this monitor's center with the fov-sized viewport's center
|
||||||
const westCenterOffsetPixels = (monitorDetails.width - fovDetails.widthPixels) / 2;
|
const westCenterOffsetPixels = (monitorDetails.width - fovDetails.sizeAdjustedWidthPixels) / 2;
|
||||||
|
|
||||||
// this is where our monitor's center is in relation to an fov-sized viewport centered about (0, 0)
|
// this is where our monitor's center is in relation to an fov-sized viewport centered about (0, 0)
|
||||||
const westCenterPixels = westLeftPixels - westCenterOffsetPixels;
|
const westCenterPixels = westLeftPixels - westCenterOffsetPixels;
|
||||||
|
|
@ -306,17 +306,16 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels;
|
const monitorSpacingPixels = monitorSpacing * fovDetails.sizeAdjustedWidthPixels;
|
||||||
|
|
||||||
// monitors make a flat wall in front of us, no wrapping
|
// monitors make a flat wall in front of us, no wrapping
|
||||||
monitorDetailsList.forEach((monitorDetails, index) => {
|
monitorDetailsList.forEach((monitorDetails, index) => {
|
||||||
const upTopPixels = -monitorDetails.y - (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels;
|
const upTopPixels = -monitorDetails.y - (monitorDetails.y / fovDetails.sizeAdjustedHeightPixels) * monitorSpacingPixels;
|
||||||
const westLeftPixels = -monitorDetails.x - (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels;
|
const westLeftPixels = -monitorDetails.x - (monitorDetails.x / fovDetails.sizeAdjustedWidthPixels) * monitorSpacingPixels;
|
||||||
|
|
||||||
// offsets for aligning this monitor's center with the fov-sized viewport's center
|
// offsets for aligning this monitor's center with the fov-sized viewport's center
|
||||||
const westCenterOffsetPixels = (monitorDetails.width - fovDetails.widthPixels) / 2;
|
const westCenterOffsetPixels = (monitorDetails.width - fovDetails.sizeAdjustedWidthPixels) / 2;
|
||||||
const upCenterOffsetPixels = (monitorDetails.height - fovDetails.heightPixels) / 2;
|
const upCenterOffsetPixels = (monitorDetails.height - fovDetails.sizeAdjustedHeightPixels) / 2;
|
||||||
|
|
||||||
const westCenterPixels = westLeftPixels - westCenterOffsetPixels;
|
const westCenterPixels = westLeftPixels - westCenterOffsetPixels;
|
||||||
const upCenterPixels = upTopPixels - upCenterOffsetPixels;
|
const upCenterPixels = upTopPixels - upCenterOffsetPixels;
|
||||||
|
|
||||||
|
|
@ -846,19 +845,24 @@ export const VirtualDisplaysActor = GObject.registerClass({
|
||||||
const defaultDistanceHorizontalRadians = 2 * Math.atan(Math.tan(fovRadians.horizontal / 2) / this._display_distance_default());
|
const defaultDistanceHorizontalRadians = 2 * Math.atan(Math.tan(fovRadians.horizontal / 2) / this._display_distance_default());
|
||||||
|
|
||||||
// distance needed for the FOV-sized monitor to fill up the screen
|
// distance needed for the FOV-sized monitor to fill up the screen
|
||||||
const fullScreenDistance = this.target_monitor.height / 2 / Math.tan(fovRadians.vertical / 2);
|
const fullScreenDistancePixels = this.target_monitor.height / 2 / Math.tan(fovRadians.vertical / 2);
|
||||||
const lensDistancePixels = fullScreenDistance / (1.0 - Globals.data_stream.device_data.lensDistanceRatio) - fullScreenDistance;
|
const lensDistancePixels = fullScreenDistancePixels / (1.0 - Globals.data_stream.device_data.lensDistanceRatio) - fullScreenDistancePixels;
|
||||||
|
|
||||||
// distance of a display at the default (most zoomed out) distance, plus the lens distance constant
|
// distance of a display at the default (most zoomed out) distance, plus the lens distance constant
|
||||||
const lensToScreenDistance = this.target_monitor.height / 2 / Math.tan(defaultDistanceVerticalRadians / 2);
|
const lensToScreenDistance = this.target_monitor.height / 2 / Math.tan(defaultDistanceVerticalRadians / 2);
|
||||||
const completeScreenDistancePixels = lensToScreenDistance + lensDistancePixels;
|
const completeScreenDistancePixels = lensToScreenDistance + lensDistancePixels;
|
||||||
|
const sizeAdjustedWidthPixels = this.target_monitor.width * this.display_size;
|
||||||
|
const sizeAdjustedHeightPixels = this.target_monitor.height * this.display_size;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
widthPixels: this.target_monitor.width,
|
widthPixels: this.target_monitor.width,
|
||||||
|
sizeAdjustedWidthPixels,
|
||||||
heightPixels: this.target_monitor.height,
|
heightPixels: this.target_monitor.height,
|
||||||
|
sizeAdjustedHeightPixels,
|
||||||
defaultDistanceVerticalRadians,
|
defaultDistanceVerticalRadians,
|
||||||
defaultDistanceHorizontalRadians,
|
defaultDistanceHorizontalRadians,
|
||||||
lensDistancePixels,
|
lensDistancePixels,
|
||||||
|
fullScreenDistancePixels,
|
||||||
completeScreenDistancePixels,
|
completeScreenDistancePixels,
|
||||||
monitorWrappingScheme: this._actual_wrap_scheme(),
|
monitorWrappingScheme: this._actual_wrap_scheme(),
|
||||||
curvedDisplay: this.curved_display
|
curvedDisplay: this.curved_display
|
||||||
|
|
@ -926,7 +930,7 @@ export const VirtualDisplaysActor = GObject.registerClass({
|
||||||
}
|
}
|
||||||
|
|
||||||
_handle_display_size_change(update_placements = true) {
|
_handle_display_size_change(update_placements = true) {
|
||||||
const sizeComplement = 1.0 - this.display_size;
|
const sizeComplement = (1.0 - this.display_size) / 2.0;
|
||||||
const sizeViewportOffsetX = sizeComplement * this.target_monitor.width;
|
const sizeViewportOffsetX = sizeComplement * this.target_monitor.width;
|
||||||
const sizeViewportOffsetY = sizeComplement * this.target_monitor.height;
|
const sizeViewportOffsetY = sizeComplement * this.target_monitor.height;
|
||||||
this._all_monitors = this._all_monitors_unmodified.map(monitor => ({
|
this._all_monitors = this._all_monitors_unmodified.map(monitor => ({
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue