From 60871eeac5ef5aa892fcc0cf50aa6019d5eb8e64 Mon Sep 17 00:00:00 2001 From: Lubos Date: Sat, 24 Sep 2022 22:39:07 +0200 Subject: [PATCH] OpenXR - Initialize Pico subsystems --- Common/VR/VRBase.cpp | 102 +++++ ext/openxr/openxr_pico.h | 907 --------------------------------------- 2 files changed, 102 insertions(+), 907 deletions(-) delete mode 100644 ext/openxr/openxr_pico.h diff --git a/Common/VR/VRBase.cpp b/Common/VR/VRBase.cpp index 9932d09553..673b1bcc97 100644 --- a/Common/VR/VRBase.cpp +++ b/Common/VR/VRBase.cpp @@ -5,14 +5,103 @@ #include #include +#ifdef OPENXR_PLATFORM_PICO +#define XR_PICO_ANDROID_CONTROLLER_FUNCTION_EXT_ENABLE_EXTENSION_NAME "XR_PICO_android_controller_function_ext_enable" +#define XR_PICO_VIEW_STATE_EXT_ENABLE_EXTENSION_NAME "XR_PICO_view_state_ext_enable" +#define XR_PICO_FRAME_END_INFO_EXT_EXTENSION_NAME "XR_PICO_frame_end_info_ext" +#define XR_PICO_CONFIGS_EXT_EXTENSION_NAME "XR_PICO_configs_ext" +#define XR_PICO_RESET_SENSOR_EXTENSION_NAME "XR_PICO_reset_sensor" + +enum ConfigsSetEXT +{ + UNREAL_VERSION = 0, + TRACKING_ORIGIN, + OPENGL_NOERROR, + ENABLE_SIX_DOF, + PRESENTATION_FLAG, + ENABLE_CPT, + PLATFORM, + FOVEATION_LEVEL, + SET_DISPLAY_RATE = 8, + MRC_TEXTURE_ID = 9, +}; + +typedef enum +{ + PXR_HMD_3DOF = 0, + PXR_HMD_6DOF +} PxrHmdDof; + +typedef enum +{ + PXR_CONTROLLER_3DOF = 0, + PXR_CONTROLLER_6DOF +} PxrControllerDof; + +typedef XrResult (XRAPI_PTR *PFN_xrSetConfigPICO) ( +XrSession session, +enum ConfigsSetEXT configIndex, +char * configData); +PFN_xrSetConfigPICO pfnXrSetConfigPICO; + +//cmc ext function ,not use from 2021/07 +typedef XrResult (XRAPI_PTR *PFN_xrSetEngineVersionPico)(XrInstance instance,const char* version); +typedef XrResult (XRAPI_PTR *PFN_xrStartCVControllerThreadPico)(XrInstance instance,int headSensorState, int handSensorState); +typedef XrResult (XRAPI_PTR *PFN_xrStopCVControllerThreadPico)(XrInstance instance,int headSensorState, int handSensorState); + +XrInstance mControllerInstance; +PFN_xrSetEngineVersionPico pfnXrSetEngineVersionPico = NULL; +PFN_xrStartCVControllerThreadPico pfnXrStartCVControllerThreadPico = NULL; +PFN_xrStopCVControllerThreadPico pfnXrStopCVControllerThreadPico = NULL; + +inline void InitializeGraphicDeivce(XrInstance mInstance) { + mControllerInstance = mInstance; + xrGetInstanceProcAddr(mInstance, "xrSetEngineVersionPico", (PFN_xrVoidFunction*)(&pfnXrSetEngineVersionPico)); + xrGetInstanceProcAddr(mInstance, "xrStartCVControllerThreadPico", (PFN_xrVoidFunction*)(&pfnXrStartCVControllerThreadPico)); + xrGetInstanceProcAddr(mInstance, "xrStopCVControllerThreadPico", (PFN_xrVoidFunction*)(&pfnXrStopCVControllerThreadPico)); +} + +inline int Pxr_SetEngineVersion(const char *version) { + if (pfnXrSetEngineVersionPico != NULL) { + return pfnXrSetEngineVersionPico(mControllerInstance,version); + } else { + return -1; + } +} + +inline int Pxr_StartCVControllerThread(int headSensorState, int handSensorState) { + if (pfnXrStartCVControllerThreadPico != NULL) { + return pfnXrStartCVControllerThreadPico(mControllerInstance,headSensorState, handSensorState); + } else { + return -1; + } +} + +inline int Pxr_StopCVControllerThread(int headSensorState, int handSensorState) { + if (pfnXrStopCVControllerThreadPico != NULL) { + return pfnXrStopCVControllerThreadPico(mControllerInstance,headSensorState, handSensorState); + } else { + return -1; + } +} +#endif + static engine_t vr_engine; int vr_initialized = 0; const char* const requiredExtensionNames[] = { + XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME, XR_KHR_OPENGL_ES_ENABLE_EXTENSION_NAME, #ifdef OPENXR_HAS_PERFORMANCE_EXTENSION XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME, XR_KHR_ANDROID_THREAD_SETTINGS_EXTENSION_NAME, +#endif +#ifdef OPENXR_PLATFORM_PICO + XR_PICO_ANDROID_CONTROLLER_FUNCTION_EXT_ENABLE_EXTENSION_NAME, + XR_PICO_VIEW_STATE_EXT_ENABLE_EXTENSION_NAME, + XR_PICO_FRAME_END_INFO_EXT_EXTENSION_NAME, + XR_PICO_CONFIGS_EXT_EXTENSION_NAME, + XR_PICO_RESET_SENSOR_EXTENSION_NAME, #endif XR_KHR_COMPOSITION_LAYER_CYLINDER_EXTENSION_NAME}; const uint32_t numRequiredExtensions = @@ -64,6 +153,13 @@ void VR_Init( ovrJava java ) { exit(1); } +#ifdef OPENXR_PLATFORM_PICO + InitializeGraphicDeivce(vr_engine.appState.Instance); + xrGetInstanceProcAddr(vr_engine.appState.Instance,"xrSetConfigPICO", (PFN_xrVoidFunction*)(&pfnXrSetConfigPICO)); + Pxr_SetEngineVersion("2.8.0.1"); + Pxr_StartCVControllerThread(PXR_HMD_6DOF, PXR_CONTROLLER_6DOF); +#endif + XrInstanceProperties instanceInfo; instanceInfo.type = XR_TYPE_INSTANCE_PROPERTIES; instanceInfo.next = NULL; @@ -108,6 +204,9 @@ void VR_Init( ovrJava java ) { void VR_Destroy( engine_t* engine ) { if (engine == &vr_engine) { +#ifdef OPENXR_PLATFORM_PICO + Pxr_StopCVControllerThread(PXR_HMD_6DOF, PXR_CONTROLLER_6DOF); +#endif xrDestroyInstance(engine->appState.Instance); ovrApp_Destroy(&engine->appState); } @@ -141,6 +240,9 @@ void VR_EnterVR( engine_t* engine ) { ALOGE("Failed to create XR session: %d.", initResult); exit(1); } +#ifdef OPENXR_PLATFORM_PICO + pfnXrSetConfigPICO(engine->appState.Session, TRACKING_ORIGIN, "1"); +#endif // Create a space to the first path XrReferenceSpaceCreateInfo spaceCreateInfo = {}; diff --git a/ext/openxr/openxr_pico.h b/ext/openxr/openxr_pico.h deleted file mode 100644 index eb44317017..0000000000 --- a/ext/openxr/openxr_pico.h +++ /dev/null @@ -1,907 +0,0 @@ -#ifndef OPENXR_PICO_H_ -#define OPENXR_PICO_H_ 1 - - -#include "openxr.h" - -#if defined(__cplusplus) -extern "C" { -#endif - -typedef struct { - char software_ver[6]; - char hardware_ver[3]; - char sn[18]; - char addr[6]; - char ndi_version[5]; -} XrControllerInfo; - -typedef enum -{ - XR_CONTROLLER_KEY_HOME = 0, - XR_CONTROLLER_KEY_AX = 1, - XR_CONTROLLER_KEY_BY= 2, - XR_CONTROLLER_KEY_BACK = 3, - XR_CONTROLLER_KEY_TRIGGER = 4, - XR_CONTROLLER_KEY_VOL_UP = 5, - XR_CONTROLLER_KEY_VOL_DOWN = 6, - XR_CONTROLLER_KEY_ROCKER = 7, - XR_CONTROLLER_KEY_GRIP = 8, - XR_CONTROLLER_KEY_TOUCHPAD = 9, - XR_CONTROLLER_KEY_LASTONE = 127, - - XR_CONTROLLER_TOUCH_AX = 128, - XR_CONTROLLER_TOUCH_BY = 129, - XR_CONTROLLER_TOUCH_ROCKER = 130, - XR_CONTROLLER_TOUCH_TRIGGER = 131, - XR_CONTROLLER_TOUCH_THUMB = 132, - XR_CONTROLLER_TOUCH_LASTONE = 255 -} XrControllerKeyMap; - -enum xrt_device_eventtype -{ - XRT_DEVICE_CONNECTCHANGED = 0, - XRT_DEVICE_MAIN_CHANGED = 1, - XRT_DEVICE_VERSION = 2, - XRT_DEVICE_SN = 3, - XRT_DEVICE_BIND_STATUS = 4, - XRT_STATION_STATUS = 5, - XRT_DEVICE_IOBUSY = 6, - XRT_DEVICE_OTASTAUS = 7, - XRT_DEVICE_ID = 8, -// XRT_DEVICE_OTASATAION_PROGRESS = 9, -// XRT_DEVICE_OTASATAION_CODE = 10, -// XRT_DEVICE_OTACONTROLLER_PROGRESS = 11, -// XRT_DEVICE_OTACONTROLLER_CODE = 12, -// XRT_DEVICE_OTA_SUCCESS = 13, -// XRT_DEVICE_BLEMAC = 14, - XRT_DEVICE_HANDNESS_CHANGED = 15, - XRT_DEVICE_CHANNEL = 16, - XRT_DEVICE_LOSSRATE = 17, - XRT_DEVICE_THREAD_STARTED = 18 -}; - -typedef struct XrRigidBodyPosef_ { - XrPosef Pose; - XrVector3f AngularVelocity; - XrVector3f LinearVelocity; - XrVector3f AngularAcceleration; - XrVector3f LinearAcceleration; - int64_t TimeInSeconds; //< Absolute time of this pose. - int64_t PredictionInSeconds; //< Seconds this pose was predicted ahead. -} XrRigidBodyPosef; - -typedef struct XrTracking_ { - unsigned int Status; - XrRigidBodyPosef ControllerLocalPose; - XrRigidBodyPosef ControllerGlobalPose; -} XrTracking; - -//pico add event:Seethrough -typedef struct XrEventDataSeethroughStateChanged { - XrStructureType type; - const void* XR_MAY_ALIAS next; - int state; -} XrEventDataSeethroughStateChanged; - -typedef struct XrEventDataKeyEvent{ - XrStructureType type; - const void* XR_MAY_ALIAS next; - int32_t repeat; - int32_t keyCode; - int8_t keyAction; - }XrEventDataKeyEvent; -//pico add new device interface -typedef struct XrControllerEventChanged { - XrStructureType type; - const void* XR_MAY_ALIAS next; - enum xrt_device_eventtype eventtype; - uint8_t controller; - uint8_t status; - uint8_t varying[400]; - uint16_t length; -} XrControllerEventChanged; - -typedef struct XrEventDataHardIPDStateChanged { - XrStructureType type; - const void* XR_MAY_ALIAS next; - float ipd; -} XrEventDataHardIPDStateChanged; - -typedef struct XrEventDataFoveationLevelChanged { - XrStructureType type; - const void* XR_MAY_ALIAS next; - int level; -} XrEventDataFoveationLevelChanged; - -typedef struct XrEventDataFrustumChanged { - XrStructureType type; - const void* XR_MAY_ALIAS next; -} XrEventDataFrustumChanged; - -typedef struct XrEventDataRenderTextureChanged { - XrStructureType type; - const void* XR_MAY_ALIAS next; - int width; - int height; -} XrEventDataRenderTextureChanged; - -typedef struct XrEventDataTargetFrameRateChanged { - XrStructureType type; - const void* XR_MAY_ALIAS next; - int frameRate; -} XrEventDataTargetFrameRateChanged; - -typedef struct XrEventDataMrcStatusChanged { - XrStructureType type; - const void* XR_MAY_ALIAS next; - int mrcStatus; -} XrEventDataMrcStatusChanged; - -//XR_TYPE_EVENT_REFRESH_RATE_CHANGE -typedef struct XrEventDataRefreshRateChanged { - XrStructureType type; - const void* XR_MAY_ALIAS next; - float refreshRate; -} XrEventDataRefreshRateChanged; - -//pico add end - - -typedef enum XrTrackingMode -{ - XR_TRACKING_MODE_ROTATION = 0x1, - XR_TRACKING_MODE_POSITION = 0x2, - XR_TRACKING_MODE_EYE = 0x4 -}XrTrackingMode; - -typedef struct XrEyeTrackingData -{ - int32_t leftEyePoseStatus; //!< Bit field (pvrEyePoseStatus) indicating left eye pose status - int32_t rightEyePoseStatus; //!< Bit field (pvrEyePoseStatus) indicating right eye pose status - int32_t combinedEyePoseStatus; //!< Bit field (pvrEyePoseStatus) indicating combined eye pose status - - float leftEyeGazePoint[3]; //!< Left Eye Gaze Point - float rightEyeGazePoint[3]; //!< Right Eye Gaze Point - float combinedEyeGazePoint[3]; //!< Combined Eye Gaze Point (HMD center-eye point) - - float leftEyeGazeVector[3]; //!< Left Eye Gaze Point - float rightEyeGazeVector[3]; //!< Right Eye Gaze Point - float combinedEyeGazeVector[3]; //!< Comnbined Eye Gaze Vector (HMD center-eye point) - - float leftEyeOpenness; //!< Left eye value between 0.0 and 1.0 where 1.0 means fully open and 0.0 closed. - float rightEyeOpenness; //!< Right eye value between 0.0 and 1.0 where 1.0 means fully open and 0.0 closed. - - float leftEyePupilDilation; //!< Left eye value in millimeters indicating the pupil dilation - float rightEyePupilDilation; //!< Right eye value in millimeters indicating the pupil dilation - - float leftEyePositionGuide[3]; //!< Position of the inner corner of the left eye in meters from the HMD center-eye coordinate system's origin. - float rightEyePositionGuide[3]; //!< Position of the inner corner of the right eye in meters from the HMD center-eye coordinate system's origin. - float foveatedGazeDirection[3]; //!< Position of the gaze direction in meters from the HMD center-eye coordinate system's origin. - int32_t foveatedGazeTrackingState; //!< The current state of the foveatedGazeDirection signal. - -}XrEyeTrackingData; - -typedef XrResult (XRAPI_PTR *PFN_xrSetTrackingModePICO)(XrSession session, uint32_t trackingMode); -typedef XrResult (XRAPI_PTR *PFN_xrGetTrackingModePICO)(XrSession session, uint32_t *trackingMode); - -typedef XrResult (XRAPI_PTR *PFN_xrGetEyeTrackingDataPICO)(XrSession session, XrEyeTrackingData *eyeTrackingData); - -#ifndef XR_NO_PROTOTYPES - -XRAPI_ATTR XrResult XRAPI_CALL xrSetTrackingModePICO( - XrSession session, - uint32_t trackingMode); - -XRAPI_ATTR XrResult XRAPI_CALL xrGetTrackingModePICO( - XrSession session, - uint32_t * trackingMode); - -XRAPI_ATTR XrResult XRAPI_CALL xrGetEyeTrackingDataPICO( - XrSession session, - XrEyeTrackingData * eyeTrackingData); - -#endif - -#define XR_PICO_singlepass_enable 1 -#define XR_PICO_singlepass_enable_SPEC_VERSION 1 -#define XR_PICO_SINGLEPASS_ENABLE_EXTENSION_NAME "XR_PICO_singlepass_enable" - -#ifdef XR_USE_PLATFORM_ANDROID - -//kevin extend for pass user created textures to runtime begin@{ -#define XR_PICO_android_swapchain_ext_enable 1 -#define XR_PICO_android_swapchain_ext_enable_SPEC_VERSION 1 -#define XR_PICO_ANDROID_SWAPCHAIN_EXT_ENABLE_EXTENSION_NAME "XR_PICO_android_swapchain_ext_enable" -typedef struct XrSwapchainCreateInfoAndroidEXT { - XrStructureType type; - const void* XR_MAY_ALIAS next; - uint32_t imageNumExt; - uint32_t* imagesExt; -} XrSwapchainCreateInfoAndroidEXT; -//kevin extend end@} - -//peter extend for pass user ffr to runtime begin@{ -typedef enum XrFoveationLevel{ - XR_FOVEATION_LEVEL_NONE = -1, - XR_FOVEATION_LEVEL_LOW = 0, - XR_FOVEATION_LEVEL_MID = 1, - XR_FOVEATION_LEVEL_HIGH = 2, - XR_FOVEATION_LEVEL_TOP_HIGH = 3 -}XrFoveationLevel; - -typedef enum XrFoveationType{ - XR_FOVEATION_LEVEL = 0, - XR_FOVEATION_PARAMETERS = 1 -}XrFoveationType; -typedef struct XrFoveationParametersEXT{ - XrStructureType type; - const void* XR_MAY_ALIAS next; - int textureIdCount; - int* textureId; - int* previousId; - float focalPointX; - float focalPointY; - XrFoveationType ffrType; - float foveationGainX; - float foveationGainY; - float foveationArea; - float foveationMinimum; - XrFoveationLevel level; - int frameOffsetCount; - float* frameOffset; -}XrFoveationParametersEXT; -//peter extend end@} - -//peter extend for IPD in runtime begin@{ -#define XR_PICO_ipd 1 -#define XR_PICO_ipd_SPEC_VERSION 1 -#define XR_PICO_IPD_EXTENSION_NAME "XR_PICO_ipd" - -typedef XrResult (XRAPI_PTR *PFN_xrSetIPDPICO)(XrSession session, float distance); -typedef XrResult (XRAPI_PTR *PFN_xrGetIPDPICO)(XrSession session, float* ipd); -typedef XrResult (XRAPI_PTR *PFN_xrSetTrackingIPDEnabledPICO)(XrSession session, bool enable); -typedef XrResult (XRAPI_PTR *PFN_xrGetTrackingIPDEnabledPICO)(XrSession session, bool* enable); -typedef XrResult (XRAPI_PTR *PFN_xrGetEyeTrackingAutoIPDPICO)(XrSession session, float* autoIPD); - -#ifndef XR_NO_PROTOTYPES -XRAPI_ATTR XrResult XRAPI_CALL xrSetIPDPICO(XrSession session, float distance); -XRAPI_ATTR XrResult XRAPI_CALL xrGetIPDPICO(XrSession session, float* ipd); -XRAPI_ATTR XrResult XRAPI_CALL xrSetTrackingIPDEnabledPICO(XrSession session, bool enable); -XRAPI_ATTR XrResult XRAPI_CALL xrGetTrackingIPDEnabledPICO(XrSession session, bool* enable); -XRAPI_ATTR XrResult XRAPI_CALL xrGetEyeTrackingAutoIPDPICO(XrSession session, float* autoIPD); -#endif -//peter extend for IPD end@} - -//peter extend for stencilmesh in runtime begin @ { -#define XR_PICO_stencilmesh 1 -#define XR_PICO_stencilmesh_SPEC_VERSION 1 -#define XR_PICO_STENCILMESH_EXTENSION_NAME "XR_PICO_stencilmesh" - -typedef XrResult (XRAPI_PTR *PFN_xrGetStencilmeshPICO)( - XrSession session, - int eye, - int *vertsCount, - int *indexCount, - float **localVerts, - unsigned int **localIndex -); - -#ifndef XR_NO_PROTOTYPES - -XRAPI_ATTR XrResult XRAPI_CALL xrGetStencilmeshPICO( - XrSession session, - int eye, - int *vertsCount, - int *indexCount, - float **localVerts, - unsigned int **localIndex -); -#endif -//peter extend for stencilmesh in runtime end @ } - -// peter extend for frustum in runtime before @ { -#define XR_PICO_view_frustum_ext 1 -#define XR_PICO_view_frustum_ext_SPEC_VERSION 1 -#define XR_PICO_VIEW_FRUSTUM_EXT_EXTENSION_NAME "XR_PICO_view_frustum_ext" - -struct XrViewFrustum -{ - float left;//!