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
|
||||
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 a file exists at custom_banner_config.yml, copy it to the xrealAirLinuxDriver directory
|
||||
|
|
@ -70,7 +73,10 @@ 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
|
||||
rm -rf build/
|
||||
|
||||
|
||||
if [ -n "${STEAMOS:-}" ]; then
|
||||
export STEAMOS
|
||||
fi
|
||||
docker-build/init.sh
|
||||
docker-build/run-build.sh $ARCH
|
||||
popd
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ function createVertexMesh(fovDetails, monitorDetails, positionVectorNWU) {
|
|||
let fovConversions = fovDetails.curvedDisplay ? fovConversionFns.curved : fovConversionFns.flat;
|
||||
const sideEdgeDistancePixels = fovConversions.centerToFovEdgeDistance(
|
||||
fovDetails.completeScreenDistancePixels,
|
||||
fovDetails.widthPixels
|
||||
fovDetails.sizeAdjustedWidthPixels
|
||||
);
|
||||
const horizontalRadians = fovConversions.lengthToRadians(
|
||||
fovDetails.defaultDistanceHorizontalRadians,
|
||||
|
|
@ -42,7 +42,7 @@ function createVertexMesh(fovDetails, monitorDetails, positionVectorNWU) {
|
|||
|
||||
const topEdgeDistancePixels = fovConversions.centerToFovEdgeDistance(
|
||||
fovDetails.completeScreenDistancePixels,
|
||||
fovDetails.heightPixels
|
||||
fovDetails.sizeAdjustedHeightPixels
|
||||
);
|
||||
const verticalRadians = fovConversions.lengthToRadians(
|
||||
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]);
|
||||
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_float(this.get_uniform_location("u_pose_position"), 3, posePositionPixels);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -206,8 +206,8 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
|||
if (fovDetails.monitorWrappingScheme === 'horizontal') {
|
||||
// monitors wrap around us horizontally
|
||||
|
||||
const sideEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.widthPixels);
|
||||
const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels;
|
||||
const sideEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.sizeAdjustedWidthPixels);
|
||||
const monitorSpacingPixels = monitorSpacing * fovDetails.sizeAdjustedWidthPixels;
|
||||
const lengthToRadianFn = (targetWidth) => conversionFns.lengthToRadians(
|
||||
fovDetails.defaultDistanceHorizontalRadians,
|
||||
fovDetails.widthPixels,
|
||||
|
|
@ -215,14 +215,14 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
|||
targetWidth
|
||||
);
|
||||
|
||||
cachedMonitorRadians[0] = -fovDetails.defaultDistanceHorizontalRadians / 2;
|
||||
cachedMonitorRadians[0] = -lengthToRadianFn(fovDetails.sizeAdjustedWidthPixels) / 2;
|
||||
horizontalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
|
||||
const monitorWrapDetails = monitorWrap(cachedMonitorRadians, monitorSpacingPixels, monitorDetails.x, monitorDetails.width, lengthToRadianFn);
|
||||
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
|
||||
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)
|
||||
const upCenterPixels = upTopPixels - upCenterOffsetPixels;
|
||||
|
|
@ -257,8 +257,8 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
|||
} else if (fovDetails.monitorWrappingScheme === 'vertical') {
|
||||
// monitors wrap around us vertically
|
||||
|
||||
const topEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.heightPixels);
|
||||
const monitorSpacingPixels = monitorSpacing * fovDetails.heightPixels;
|
||||
const topEdgeRadius = conversionFns.centerToFovEdgeDistance(fovDetails.completeScreenDistancePixels, fovDetails.sizeAdjustedHeightPixels);
|
||||
const monitorSpacingPixels = monitorSpacing * fovDetails.sizeAdjustedHeightPixels;
|
||||
const lengthToRadianFn = (targetHeight) => conversionFns.lengthToRadians(
|
||||
fovDetails.defaultDistanceVerticalRadians,
|
||||
fovDetails.heightPixels,
|
||||
|
|
@ -266,14 +266,14 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
|||
targetHeight
|
||||
);
|
||||
|
||||
cachedMonitorRadians[0] = -fovDetails.defaultDistanceVerticalRadians / 2;
|
||||
cachedMonitorRadians[0] = -lengthToRadianFn(fovDetails.sizeAdjustedHeightPixels) / 2;
|
||||
verticalMonitorSort(monitorDetailsList).forEach(({monitorDetails, originalIndex}) => {
|
||||
const monitorWrapDetails = monitorWrap(cachedMonitorRadians, monitorSpacingPixels, monitorDetails.y, monitorDetails.height, lengthToRadianFn);
|
||||
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
|
||||
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)
|
||||
const westCenterPixels = westLeftPixels - westCenterOffsetPixels;
|
||||
|
|
@ -306,17 +306,16 @@ function monitorsToPlacements(fovDetails, monitorDetailsList, monitorSpacing) {
|
|||
});
|
||||
});
|
||||
} else {
|
||||
const monitorSpacingPixels = monitorSpacing * fovDetails.widthPixels;
|
||||
const monitorSpacingPixels = monitorSpacing * fovDetails.sizeAdjustedWidthPixels;
|
||||
|
||||
// monitors make a flat wall in front of us, no wrapping
|
||||
monitorDetailsList.forEach((monitorDetails, index) => {
|
||||
const upTopPixels = -monitorDetails.y - (monitorDetails.y / fovDetails.heightPixels) * monitorSpacingPixels;
|
||||
const westLeftPixels = -monitorDetails.x - (monitorDetails.x / fovDetails.widthPixels) * monitorSpacingPixels;
|
||||
const upTopPixels = -monitorDetails.y - (monitorDetails.y / fovDetails.sizeAdjustedHeightPixels) * monitorSpacingPixels;
|
||||
const westLeftPixels = -monitorDetails.x - (monitorDetails.x / fovDetails.sizeAdjustedWidthPixels) * monitorSpacingPixels;
|
||||
|
||||
// offsets for aligning this monitor's center with the fov-sized viewport's center
|
||||
const westCenterOffsetPixels = (monitorDetails.width - fovDetails.widthPixels) / 2;
|
||||
const upCenterOffsetPixels = (monitorDetails.height - fovDetails.heightPixels) / 2;
|
||||
|
||||
const westCenterOffsetPixels = (monitorDetails.width - fovDetails.sizeAdjustedWidthPixels) / 2;
|
||||
const upCenterOffsetPixels = (monitorDetails.height - fovDetails.sizeAdjustedHeightPixels) / 2;
|
||||
const westCenterPixels = westLeftPixels - westCenterOffsetPixels;
|
||||
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());
|
||||
|
||||
// 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 lensDistancePixels = fullScreenDistance / (1.0 - Globals.data_stream.device_data.lensDistanceRatio) - fullScreenDistance;
|
||||
const fullScreenDistancePixels = this.target_monitor.height / 2 / Math.tan(fovRadians.vertical / 2);
|
||||
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
|
||||
const lensToScreenDistance = this.target_monitor.height / 2 / Math.tan(defaultDistanceVerticalRadians / 2);
|
||||
const completeScreenDistancePixels = lensToScreenDistance + lensDistancePixels;
|
||||
const sizeAdjustedWidthPixels = this.target_monitor.width * this.display_size;
|
||||
const sizeAdjustedHeightPixels = this.target_monitor.height * this.display_size;
|
||||
|
||||
return {
|
||||
widthPixels: this.target_monitor.width,
|
||||
sizeAdjustedWidthPixels,
|
||||
heightPixels: this.target_monitor.height,
|
||||
sizeAdjustedHeightPixels,
|
||||
defaultDistanceVerticalRadians,
|
||||
defaultDistanceHorizontalRadians,
|
||||
lensDistancePixels,
|
||||
fullScreenDistancePixels,
|
||||
completeScreenDistancePixels,
|
||||
monitorWrappingScheme: this._actual_wrap_scheme(),
|
||||
curvedDisplay: this.curved_display
|
||||
|
|
@ -926,7 +930,7 @@ export const VirtualDisplaysActor = GObject.registerClass({
|
|||
}
|
||||
|
||||
_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 sizeViewportOffsetY = sizeComplement * this.target_monitor.height;
|
||||
this._all_monitors = this._all_monitors_unmodified.map(monitor => ({
|
||||
|
|
|
|||
Loading…
Reference in New Issue