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
diff options
context:
space:
mode:
Diffstat (limited to 'intern/ghost/intern/GHOST_XrSession.cpp')
-rw-r--r--intern/ghost/intern/GHOST_XrSession.cpp119
1 files changed, 42 insertions, 77 deletions
diff --git a/intern/ghost/intern/GHOST_XrSession.cpp b/intern/ghost/intern/GHOST_XrSession.cpp
index 919d11d22a9..8b0320ef358 100644
--- a/intern/ghost/intern/GHOST_XrSession.cpp
+++ b/intern/ghost/intern/GHOST_XrSession.cpp
@@ -422,6 +422,7 @@ void GHOST_XrSession::drawView(GHOST_XrSwapchain &swapchain,
assert(view_idx < 256);
draw_view_info.view_idx = (char)view_idx;
+ draw_view_info.swapchain_format = swapchain.getFormat();
draw_view_info.expects_srgb_buffer = swapchain.isBufferSRGB();
draw_view_info.ofsx = r_proj_layer_view.subImage.imageRect.offset.x;
draw_view_info.ofsy = r_proj_layer_view.subImage.imageRect.offset.y;
@@ -610,9 +611,9 @@ void GHOST_XrSession::destroyActions(const char *action_set_name,
}
}
-bool GHOST_XrSession::createActionSpaces(const char *action_set_name,
- uint32_t count,
- const GHOST_XrActionSpaceInfo *infos)
+bool GHOST_XrSession::createActionBindings(const char *action_set_name,
+ uint32_t count,
+ const GHOST_XrActionProfileInfo *infos)
{
GHOST_XrActionSet *action_set = find_action_set(m_oxr.get(), action_set_name);
if (action_set == nullptr) {
@@ -622,98 +623,37 @@ bool GHOST_XrSession::createActionSpaces(const char *action_set_name,
XrInstance instance = m_context->getInstance();
XrSession session = m_oxr->session;
- for (uint32_t action_idx = 0; action_idx < count; ++action_idx) {
- const GHOST_XrActionSpaceInfo &info = infos[action_idx];
+ for (uint32_t profile_idx = 0; profile_idx < count; ++profile_idx) {
+ const GHOST_XrActionProfileInfo &info = infos[profile_idx];
GHOST_XrAction *action = action_set->findAction(info.action_name);
if (action == nullptr) {
continue;
}
- if (!action->createSpace(instance, session, info)) {
- return false;
- }
+ action->createBinding(instance, session, info);
}
return true;
}
-void GHOST_XrSession::destroyActionSpaces(const char *action_set_name,
- uint32_t count,
- const GHOST_XrActionSpaceInfo *infos)
+void GHOST_XrSession::destroyActionBindings(const char *action_set_name,
+ uint32_t count,
+ const char *const *action_names,
+ const char *const *profile_paths)
{
GHOST_XrActionSet *action_set = find_action_set(m_oxr.get(), action_set_name);
if (action_set == nullptr) {
return;
}
- for (uint32_t action_idx = 0; action_idx < count; ++action_idx) {
- const GHOST_XrActionSpaceInfo &info = infos[action_idx];
-
- GHOST_XrAction *action = action_set->findAction(info.action_name);
+ for (uint32_t i = 0; i < count; ++i) {
+ GHOST_XrAction *action = action_set->findAction(action_names[i]);
if (action == nullptr) {
continue;
}
- for (uint32_t subaction_idx = 0; subaction_idx < info.count_subaction_paths; ++subaction_idx) {
- action->destroySpace(info.subaction_paths[subaction_idx]);
- }
- }
-}
-
-bool GHOST_XrSession::createActionBindings(const char *action_set_name,
- uint32_t count,
- const GHOST_XrActionProfileInfo *infos)
-{
- GHOST_XrActionSet *action_set = find_action_set(m_oxr.get(), action_set_name);
- if (action_set == nullptr) {
- return false;
- }
-
- XrInstance instance = m_context->getInstance();
-
- for (uint32_t profile_idx = 0; profile_idx < count; ++profile_idx) {
- const GHOST_XrActionProfileInfo &info = infos[profile_idx];
- const char *profile_path = info.profile_path;
-
- for (uint32_t binding_idx = 0; binding_idx < info.count_bindings; ++binding_idx) {
- const GHOST_XrActionBindingInfo &binding = info.bindings[binding_idx];
-
- GHOST_XrAction *action = action_set->findAction(binding.action_name);
- if (action == nullptr) {
- continue;
- }
-
- action->createBinding(instance, profile_path, binding);
- }
- }
-
- return true;
-}
-
-void GHOST_XrSession::destroyActionBindings(const char *action_set_name,
- uint32_t count,
- const GHOST_XrActionProfileInfo *infos)
-{
- GHOST_XrActionSet *action_set = find_action_set(m_oxr.get(), action_set_name);
- if (action_set == nullptr) {
- return;
- }
-
- for (uint32_t profile_idx = 0; profile_idx < count; ++profile_idx) {
- const GHOST_XrActionProfileInfo &info = infos[profile_idx];
- const char *profile_path = info.profile_path;
-
- for (uint32_t binding_idx = 0; binding_idx < info.count_bindings; ++binding_idx) {
- const GHOST_XrActionBindingInfo &binding = info.bindings[binding_idx];
-
- GHOST_XrAction *action = action_set->findAction(binding.action_name);
- if (action == nullptr) {
- continue;
- }
-
- action->destroyBinding(profile_path);
- }
+ action->destroyBinding(profile_paths[i]);
}
}
@@ -815,6 +755,7 @@ bool GHOST_XrSession::syncActions(const char *action_set_name)
bool GHOST_XrSession::applyHapticAction(const char *action_set_name,
const char *action_name,
+ const char *subaction_path,
const int64_t &duration,
const float &frequency,
const float &amplitude)
@@ -829,12 +770,15 @@ bool GHOST_XrSession::applyHapticAction(const char *action_set_name,
return false;
}
- action->applyHapticFeedback(m_oxr->session, action_name, duration, frequency, amplitude);
+ action->applyHapticFeedback(
+ m_oxr->session, action_name, subaction_path, duration, frequency, amplitude);
return true;
}
-void GHOST_XrSession::stopHapticAction(const char *action_set_name, const char *action_name)
+void GHOST_XrSession::stopHapticAction(const char *action_set_name,
+ const char *action_name,
+ const char *subaction_path)
{
GHOST_XrActionSet *action_set = find_action_set(m_oxr.get(), action_set_name);
if (action_set == nullptr) {
@@ -846,7 +790,7 @@ void GHOST_XrSession::stopHapticAction(const char *action_set_name, const char *
return;
}
- action->stopHapticFeedback(m_oxr->session, action_name);
+ action->stopHapticFeedback(m_oxr->session, action_name, subaction_path);
}
void *GHOST_XrSession::getActionSetCustomdata(const char *action_set_name)
@@ -874,4 +818,25 @@ void *GHOST_XrSession::getActionCustomdata(const char *action_set_name, const ch
return action->getCustomdata();
}
+uint32_t GHOST_XrSession::getActionCount(const char *action_set_name)
+{
+ GHOST_XrActionSet *action_set = find_action_set(m_oxr.get(), action_set_name);
+ if (action_set == nullptr) {
+ return 0;
+ }
+
+ return action_set->getActionCount();
+}
+
+void GHOST_XrSession::getActionCustomdataArray(const char *action_set_name,
+ void **r_customdata_array)
+{
+ GHOST_XrActionSet *action_set = find_action_set(m_oxr.get(), action_set_name);
+ if (action_set == nullptr) {
+ return;
+ }
+
+ action_set->getActionCustomdataArray(r_customdata_array);
+}
+
/** \} */ /* Actions */