Update desktop overlay waiting logic
The old version waited for a set amount of time (2 seconds) before checking and then exiting. The new logic checks every second for up to 7 seconds. This should deal with variances in startup time across machines. On my machine the desktop overlay seems to be initialized after 2-3 seconds.
This commit is contained in:
@@ -546,36 +546,48 @@ void UtilitiesTabController::eventLoopTick()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UtilitiesTabController::setUpDesktopOverlay( float desktopWidthInMeters )
|
bool steamDesktopOverlayExists()
|
||||||
{
|
{
|
||||||
vr::VROverlayHandle_t pOverlayHandle = 0;
|
vr::VROverlayHandle_t pOverlayHandle = 0;
|
||||||
auto error = vr::VROverlay()->FindOverlay( steamDesktopOverlaykey,
|
auto error = vr::VROverlay()->FindOverlay( steamDesktopOverlaykey,
|
||||||
&pOverlayHandle );
|
&pOverlayHandle );
|
||||||
if ( error != vr::VROverlayError_None )
|
if ( error != vr::VROverlayError_None )
|
||||||
{
|
{
|
||||||
m_steamDesktopOverlayAvailable = false;
|
|
||||||
LOG( INFO ) << "Could not find overlay \"" << steamDesktopOverlaykey
|
LOG( INFO ) << "Could not find overlay \"" << steamDesktopOverlaykey
|
||||||
<< "\": "
|
<< "\": "
|
||||||
<< vr::VROverlay()->GetOverlayErrorNameFromEnum( error );
|
<< vr::VROverlay()->GetOverlayErrorNameFromEnum( error );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
std::this_thread::sleep_for( std::chrono::seconds( 2 ) );
|
void UtilitiesTabController::setUpDesktopOverlay( float desktopWidthInMeters )
|
||||||
|
{
|
||||||
|
auto setOverlayVariablesSuccess = [this, desktopWidthInMeters]() {
|
||||||
|
m_steamDesktopOverlayAvailable = true;
|
||||||
|
setSteamDesktopOverlayWidth( desktopWidthInMeters, true, true );
|
||||||
|
LOG( INFO ) << "Found overlay \"" << steamDesktopOverlaykey << "\".";
|
||||||
|
};
|
||||||
|
|
||||||
error = vr::VROverlay()->FindOverlay( steamDesktopOverlaykey,
|
if ( steamDesktopOverlayExists() )
|
||||||
&pOverlayHandle );
|
{
|
||||||
if ( error != vr::VROverlayError_None )
|
setOverlayVariablesSuccess();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr auto timeBetweenAdditionalAttempts = std::chrono::seconds( 1 );
|
||||||
|
constexpr auto maxAttempts = 7;
|
||||||
|
for ( int attempts = 0; attempts < maxAttempts; ++attempts )
|
||||||
|
{
|
||||||
|
std::this_thread::sleep_for( timeBetweenAdditionalAttempts );
|
||||||
|
if ( steamDesktopOverlayExists() )
|
||||||
{
|
{
|
||||||
LOG( INFO ) << "Could not find overlay \"" << steamDesktopOverlaykey
|
setOverlayVariablesSuccess();
|
||||||
<< "\" after waiting: "
|
|
||||||
<< vr::VROverlay()->GetOverlayErrorNameFromEnum(
|
|
||||||
error );
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LOG( INFO ) << "Found overlay \"" << steamDesktopOverlaykey
|
|
||||||
<< "\" after waiting.";
|
|
||||||
}
|
}
|
||||||
m_steamDesktopOverlayAvailable = true;
|
LOG( INFO ) << "Could not find overlay \"" << steamDesktopOverlaykey
|
||||||
|
<< "\" after " << maxAttempts << " extra attempts.";
|
||||||
setSteamDesktopOverlayWidth( desktopWidthInMeters, true, true );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UtilitiesTabController::steamDesktopOverlayAvailable() const
|
bool UtilitiesTabController::steamDesktopOverlayAvailable() const
|
||||||
|
|||||||
Reference in New Issue
Block a user