···4949DEBUG_GET_ONCE_BOOL_OPTION(debug_spaces, "OXR_DEBUG_SPACES", false)
5050DEBUG_GET_ONCE_BOOL_OPTION(debug_bindings, "OXR_DEBUG_BINDINGS", false)
5151DEBUG_GET_ONCE_BOOL_OPTION(lifecycle_verbose, "OXR_LIFECYCLE_VERBOSE", false)
5252+DEBUG_GET_ONCE_TRISTATE_OPTION(parallel_views, "OXR_PARALLEL_VIEWS")
525353545455#ifdef XRT_OS_ANDROID
···202203203204 // Currently always true.
204205 inst->quirks.no_validation_error_in_create_ref_space = true;
206206+207207+ enum debug_tristate_option parallel_view = debug_get_tristate_option_parallel_views();
208208+209209+ // Only override hardcoded quirks when explicitly enabling or disabling, not on auto.
210210+ if (parallel_view == DEBUG_TRISTATE_OFF) {
211211+ inst->quirks.parallel_views = false;
212212+ } else if (parallel_view == DEBUG_TRISTATE_ON) {
213213+ inst->quirks.parallel_views = true;
214214+ }
205215}
206216207217XrResult
+3
src/xrt/state_trackers/oxr/oxr_objects.h
···17111711 * XR_ERROR_VALIDATION_FAILURE in xrCreateReferenceSpace.
17121712 */
17131713 bool no_validation_error_in_create_ref_space;
17141714+17151715+ //! For applications that rely on views being parallel, notably some OpenVR games with OpenComposite.
17161716+ bool parallel_views;
17141717 } quirks;
1715171817161719 //! Debug messengers
+5-1
src/xrt/state_trackers/oxr/oxr_session.c
···614614 * Pose
615615 */
616616617617- const struct xrt_pose view_pose = poses[i];
617617+ struct xrt_pose view_pose = poses[i];
618618+619619+ if (sess->sys->inst->quirks.parallel_views) {
620620+ view_pose.orientation = (struct xrt_quat)XRT_QUAT_IDENTITY;
621621+ }
618622619623 // Do the magical space relation dance here.
620624 struct xrt_space_relation result = {0};