Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
Diffstat (limited to 'intern')
-rw-r--r--intern/ghost/intern/GHOST_XrContext.cpp9
-rw-r--r--intern/ghost/intern/GHOST_XrSession.cpp21
-rw-r--r--intern/ghost/intern/GHOST_XrSession.h3
3 files changed, 20 insertions, 13 deletions
diff --git a/intern/ghost/intern/GHOST_XrContext.cpp b/intern/ghost/intern/GHOST_XrContext.cpp
index 2cd5b2ca8c8..3aab420a9b6 100644
--- a/intern/ghost/intern/GHOST_XrContext.cpp
+++ b/intern/ghost/intern/GHOST_XrContext.cpp
@@ -465,7 +465,14 @@ void GHOST_XrContext::startSession(const GHOST_XrSessionBeginInfo *begin_info)
void GHOST_XrContext::endSession()
{
- m_session->requestEnd();
+ if (m_session) {
+ if (m_session->isRunning()) {
+ m_session->requestEnd();
+ }
+ else {
+ m_session = nullptr;
+ }
+ }
}
bool GHOST_XrContext::isSessionRunning() const
diff --git a/intern/ghost/intern/GHOST_XrSession.cpp b/intern/ghost/intern/GHOST_XrSession.cpp
index 1f24f2fb37f..edc4960cf32 100644
--- a/intern/ghost/intern/GHOST_XrSession.cpp
+++ b/intern/ghost/intern/GHOST_XrSession.cpp
@@ -203,13 +203,17 @@ void GHOST_XrSession::requestEnd()
xrRequestExitSession(m_oxr->session);
}
-void GHOST_XrSession::end()
+void GHOST_XrSession::beginSession()
{
- assert(m_oxr->session != XR_NULL_HANDLE);
+ XrSessionBeginInfo begin_info = {XR_TYPE_SESSION_BEGIN_INFO};
+ begin_info.primaryViewConfigurationType = m_oxr->view_type;
+ CHECK_XR(xrBeginSession(m_oxr->session, &begin_info), "Failed to cleanly begin the VR session.");
+}
+void GHOST_XrSession::endSession()
+{
+ assert(m_oxr->session != XR_NULL_HANDLE);
CHECK_XR(xrEndSession(m_oxr->session), "Failed to cleanly end the VR session.");
- unbindGraphicsContext();
- m_draw_info = nullptr;
}
GHOST_XrSession::LifeExpectancy GHOST_XrSession::handleStateChangeEvent(
@@ -222,16 +226,11 @@ GHOST_XrSession::LifeExpectancy GHOST_XrSession::handleStateChangeEvent(
switch (lifecycle->state) {
case XR_SESSION_STATE_READY: {
- XrSessionBeginInfo begin_info = {XR_TYPE_SESSION_BEGIN_INFO};
-
- begin_info.primaryViewConfigurationType = m_oxr->view_type;
- CHECK_XR(xrBeginSession(m_oxr->session, &begin_info),
- "Failed to cleanly begin the VR session.");
+ beginSession();
break;
}
case XR_SESSION_STATE_STOPPING:
- /* Runtime will change state to STATE_EXITING, don't destruct session yet. */
- end();
+ endSession();
break;
case XR_SESSION_STATE_EXITING:
case XR_SESSION_STATE_LOSS_PENDING:
diff --git a/intern/ghost/intern/GHOST_XrSession.h b/intern/ghost/intern/GHOST_XrSession.h
index 39e1a63ffda..da0128b2851 100644
--- a/intern/ghost/intern/GHOST_XrSession.h
+++ b/intern/ghost/intern/GHOST_XrSession.h
@@ -68,7 +68,8 @@ class GHOST_XrSession {
std::unique_ptr<GHOST_XrDrawInfo> m_draw_info;
void initSystem();
- void end();
+ void beginSession();
+ void endSession();
void bindGraphicsContext();