work around a ue 5.5 regression (UE-212224) while sensecom is running and gloves are connected

This commit is contained in:
Mamadou Babaei
2025-12-09 13:27:10 +01:00
parent f4c2e9d8d7
commit e772d27470
2 changed files with 12 additions and 4 deletions
+8
View File
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
This patch release addresses a severe regression affecting UE `5.5` projects with specific settings.
### Fixed
- Resolved a critical deadlock between the rendering and game threads in Unreal Engine `5.5` that when `IHeadMountedDisplay::GetHMDMonitorInfo()` is invoked from `FSGXRTracker::GetControllerTransform()` in certain conditions; specifically while SenseCom is running and gloves are present and connected. This issue is [related to critical deadlock issue (UE-212224), occurring during PipelinedFrameState acquisition, which had already been addressed for the plugin versions running on UE `5.6+`](#260---2025-06-04). Because it only gets triggered under specific project settings, we were previously unaware that it also affected IHeadMountedDisplay::GetHMDMonitorInfo() in UE 5.5.
## [2.7.0] - 2025-11-18 ## [2.7.0] - 2025-11-18
This minor release focuses on delivering performance improvements, made possible by major optimizations in the underlying proprietary SenseGlove libraries, while also introducing some breaking changes. This minor release focuses on delivering performance improvements, made possible by major optimizations in the underlying proprietary SenseGlove libraries, while also introducing some breaking changes.
@@ -72,12 +72,12 @@ struct FSGHMDTracker::FStaticImpl
void FSGHMDTracker::FStaticImpl::GetHMDMonitorInfo( void FSGHMDTracker::FStaticImpl::GetHMDMonitorInfo(
IHeadMountedDisplay* Device, IHeadMountedDisplay::MonitorInfo& OutMonitorInfo) IHeadMountedDisplay* Device, IHeadMountedDisplay::MonitorInfo& OutMonitorInfo)
{ {
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 5 #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 4
Device->GetHMDMonitorInfo(OutMonitorInfo); Device->GetHMDMonitorInfo(OutMonitorInfo);
return; return;
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 5 */ #endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 4 */
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 6 #if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5
TPromise<TOptional<IHeadMountedDisplay::MonitorInfo>> Promise; TPromise<TOptional<IHeadMountedDisplay::MonitorInfo>> Promise;
const TFuture<TOptional<IHeadMountedDisplay::MonitorInfo>> Future{Promise.GetFuture()}; const TFuture<TOptional<IHeadMountedDisplay::MonitorInfo>> Future{Promise.GetFuture()};
@@ -100,7 +100,7 @@ void FSGHMDTracker::FStaticImpl::GetHMDMonitorInfo(
OutMonitorInfo = Result.GetValue(); OutMonitorInfo = Result.GetValue();
} }
} }
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 6 */ #endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 5 */
} }
FName FSGHMDTracker::GetDeviceName() FName FSGHMDTracker::GetDeviceName()