Skip to content
Snippets Groups Projects
Verified Commit 17200c24 authored by Tobias Frisch's avatar Tobias Frisch
Browse files

Create XR space for controller

parent 14ee7460
No related tags found
1 merge request!117Draft: Resolve "AR/VR Support via OpenXR"
...@@ -25,6 +25,7 @@ namespace vkcv::camera { ...@@ -25,6 +25,7 @@ namespace vkcv::camera {
XrInstance m_instance; XrInstance m_instance;
XrSystemId m_system_id; XrSystemId m_system_id;
XrSession m_session; XrSession m_session;
XrSpace m_space;
public: public:
......
...@@ -6,12 +6,10 @@ namespace vkcv::camera { ...@@ -6,12 +6,10 @@ namespace vkcv::camera {
XRCameraController::XRCameraController() : XRCameraController::XRCameraController() :
m_instance(XR_NULL_HANDLE), m_instance(XR_NULL_HANDLE),
m_system_id(XR_NULL_SYSTEM_ID), m_system_id(XR_NULL_SYSTEM_ID),
m_session(XR_NULL_HANDLE) m_session(XR_NULL_HANDLE),
m_space(XR_NULL_HANDLE)
{ {
XrInstanceCreateInfo instanceInfo {XR_TYPE_INSTANCE_CREATE_INFO}; XrInstanceCreateInfo instanceInfo {XR_TYPE_INSTANCE_CREATE_INFO};
instanceInfo.next = nullptr;
instanceInfo.enabledExtensionCount = 0;
instanceInfo.enabledExtensionNames = nullptr;
strcpy(instanceInfo.applicationInfo.applicationName, VKCV_FRAMEWORK_NAME); strcpy(instanceInfo.applicationInfo.applicationName, VKCV_FRAMEWORK_NAME);
...@@ -27,15 +25,26 @@ namespace vkcv::camera { ...@@ -27,15 +25,26 @@ namespace vkcv::camera {
} }
XrSessionCreateInfo sessionInfo {XR_TYPE_SESSION_CREATE_INFO}; XrSessionCreateInfo sessionInfo {XR_TYPE_SESSION_CREATE_INFO};
sessionInfo.next = nullptr;
sessionInfo.systemId = m_system_id; sessionInfo.systemId = m_system_id;
if (XR_SUCCESS != xrCreateSession(m_instance, &sessionInfo, &m_session)) { if (XR_SUCCESS != xrCreateSession(m_instance, &sessionInfo, &m_session)) {
vkcv::log(vkcv::LogLevel::ERROR, "Creating an XR session failed"); vkcv::log(vkcv::LogLevel::ERROR, "Creating an XR session failed");
} }
XrReferenceSpaceCreateInfo spaceInfo {XR_TYPE_REFERENCE_SPACE_CREATE_INFO};
spaceInfo.poseInReferenceSpace.orientation.w = 1.0f;
spaceInfo.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL;
if (XR_SUCCESS != xrCreateReferenceSpace(m_session, &spaceInfo, &m_space)) {
vkcv::log(vkcv::LogLevel::ERROR, "Creating an XR space failed");
}
} }
XRCameraController::~XRCameraController() { XRCameraController::~XRCameraController() {
if (m_space) {
xrDestroySpace(m_space);
}
if (m_session) { if (m_session) {
xrDestroySession(m_session); xrDestroySession(m_session);
} }
...@@ -46,6 +55,31 @@ namespace vkcv::camera { ...@@ -46,6 +55,31 @@ namespace vkcv::camera {
} }
void XRCameraController::updateCamera(double deltaTime, Camera &camera) { void XRCameraController::updateCamera(double deltaTime, Camera &camera) {
std::vector<XrView> views;
XrViewState viewState {XR_TYPE_VIEW_STATE};
const uint32_t viewCapacity = views.size();
uint32_t viewCount;
XrViewLocateInfo viewInfo {XR_TYPE_VIEW_LOCATE_INFO};
viewInfo.viewConfigurationType = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;
viewInfo.space = m_space;
XrResult result = xrLocateViews(
m_session,
&viewInfo,
&viewState,
&viewCount,
views.data()
);
if ((XR_SUCCESS != result) ||
((viewState.viewStateFlags & XR_VIEW_STATE_POSITION_VALID_BIT) == 0) ||
((viewState.viewStateFlags & XR_VIEW_STATE_ORIENTATION_VALID_BIT) == 0)) {
vkcv::log(vkcv::LogLevel::WARNING, "Unable to locate XR views");
return;
}
// TODO // TODO
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment