|
Lines 42-55
static bool isSessionReady(XrSessionState state)
a/Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp_sec1
|
| 42 |
return state >= XR_SESSION_STATE_READY && state < XR_SESSION_STATE_STOPPING; |
42 |
return state >= XR_SESSION_STATE_READY && state < XR_SESSION_STATE_STOPPING; |
| 43 |
} |
43 |
} |
| 44 |
|
44 |
|
| 45 |
OpenXRDevice::OpenXRDevice(XrInstance instance, XrSystemId system, WorkQueue& queue, const OpenXRExtensions& extensions, CompletionHandler<void()>&& callback) |
45 |
Ref<OpenXRDevice> OpenXRDevice::create(XrInstance instance, XrSystemId system, Ref<WorkQueue>&& queue, const OpenXRExtensions& extensions, CompletionHandler<void()>&& callback) |
|
|
46 |
{ |
| 47 |
auto device = adoptRef(*new OpenXRDevice(instance, system, WTFMove(queue), extensions)); |
| 48 |
device->initialize(WTFMove(callback)); |
| 49 |
return device; |
| 50 |
} |
| 51 |
|
| 52 |
OpenXRDevice::OpenXRDevice(XrInstance instance, XrSystemId system, Ref<WorkQueue>&& queue, const OpenXRExtensions& extensions) |
| 46 |
: m_instance(instance) |
53 |
: m_instance(instance) |
| 47 |
, m_systemId(system) |
54 |
, m_systemId(system) |
| 48 |
, m_queue(queue) |
55 |
, m_queue(queue) |
| 49 |
, m_extensions(extensions) |
56 |
, m_extensions(extensions) |
|
|
57 |
{ |
| 58 |
} |
| 59 |
|
| 60 |
void OpenXRDevice::initialize(CompletionHandler<void()>&& callback) |
| 50 |
{ |
61 |
{ |
| 51 |
ASSERT(isMainThread()); |
62 |
ASSERT(isMainThread()); |
| 52 |
m_queue.dispatch([this, callback = WTFMove(callback)]() mutable { |
63 |
m_queue.dispatch([this, protectedThis = makeRef(*this), callback = WTFMove(callback)]() mutable { |
| 53 |
auto systemProperties = createStructure<XrSystemProperties, XR_TYPE_SYSTEM_PROPERTIES>(); |
64 |
auto systemProperties = createStructure<XrSystemProperties, XR_TYPE_SYSTEM_PROPERTIES>(); |
| 54 |
auto result = xrGetSystemProperties(m_instance, m_systemId, &systemProperties); |
65 |
auto result = xrGetSystemProperties(m_instance, m_systemId, &systemProperties); |
| 55 |
if (XR_SUCCEEDED(result)) |
66 |
if (XR_SUCCEEDED(result)) |
|
Lines 78-84
WebCore::IntSize OpenXRDevice::recommendedResolution(SessionMode mode)
a/Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp_sec2
|
| 78 |
|
89 |
|
| 79 |
void OpenXRDevice::initializeTrackingAndRendering(SessionMode mode) |
90 |
void OpenXRDevice::initializeTrackingAndRendering(SessionMode mode) |
| 80 |
{ |
91 |
{ |
| 81 |
m_queue.dispatch([this, mode]() { |
92 |
m_queue.dispatch([this, protectedThis = makeRef(*this), mode]() { |
| 82 |
ASSERT(m_instance != XR_NULL_HANDLE); |
93 |
ASSERT(m_instance != XR_NULL_HANDLE); |
| 83 |
ASSERT(m_session == XR_NULL_HANDLE); |
94 |
ASSERT(m_session == XR_NULL_HANDLE); |
| 84 |
ASSERT(m_extensions.methods().xrGetOpenGLGraphicsRequirementsKHR); |
95 |
ASSERT(m_extensions.methods().xrGetOpenGLGraphicsRequirementsKHR); |
|
Lines 123-129
void OpenXRDevice::initializeTrackingAndRendering(SessionMode mode)
a/Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp_sec3
|
| 123 |
|
134 |
|
| 124 |
void OpenXRDevice::shutDownTrackingAndRendering() |
135 |
void OpenXRDevice::shutDownTrackingAndRendering() |
| 125 |
{ |
136 |
{ |
| 126 |
m_queue.dispatch([this]() { |
137 |
m_queue.dispatch([this, protectedThis = makeRef(*this)]() { |
| 127 |
if (m_session == XR_NULL_HANDLE) |
138 |
if (m_session == XR_NULL_HANDLE) |
| 128 |
return; |
139 |
return; |
| 129 |
|
140 |
|
|
Lines 149-155
void OpenXRDevice::initializeReferenceSpace(PlatformXR::ReferenceSpaceType space
a/Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp_sec4
|
| 149 |
|
160 |
|
| 150 |
void OpenXRDevice::requestFrame(RequestFrameCallback&& callback) |
161 |
void OpenXRDevice::requestFrame(RequestFrameCallback&& callback) |
| 151 |
{ |
162 |
{ |
| 152 |
m_queue.dispatch([this, callback = WTFMove(callback)]() mutable { |
163 |
m_queue.dispatch([this, protectedThis = makeRef(*this), callback = WTFMove(callback)]() mutable { |
| 153 |
pollEvents(); |
164 |
pollEvents(); |
| 154 |
if (!isSessionReady(m_sessionState)) { |
165 |
if (!isSessionReady(m_sessionState)) { |
| 155 |
callOnMainThread([callback = WTFMove(callback)]() mutable { |
166 |
callOnMainThread([callback = WTFMove(callback)]() mutable { |
|
Lines 448-454
void OpenXRDevice::waitUntilStopping()
a/Source/WebCore/platform/xr/openxr/PlatformXROpenXR.cpp_sec5
|
| 448 |
pollEvents(); |
459 |
pollEvents(); |
| 449 |
if (m_sessionState >= XR_SESSION_STATE_STOPPING) |
460 |
if (m_sessionState >= XR_SESSION_STATE_STOPPING) |
| 450 |
return; |
461 |
return; |
| 451 |
m_queue.dispatch([this]() { |
462 |
m_queue.dispatch([this, protectedThis = makeRef(*this)]() { |
| 452 |
waitUntilStopping(); |
463 |
waitUntilStopping(); |
| 453 |
}); |
464 |
}); |
| 454 |
} |
465 |
} |