462 lines
18 KiB
C++
462 lines
18 KiB
C++
|
// @lint-ignore-every LICENSELINT
|
||
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||
|
|
||
|
#include "OculusXRPluginWrapper.h"
|
||
|
#include "OculusXRHMDModule.h"
|
||
|
|
||
|
#if PLATFORM_ANDROID
|
||
|
#include <dlfcn.h>
|
||
|
#define MIN_SDK_VERSION 29
|
||
|
#endif
|
||
|
|
||
|
DEFINE_LOG_CATEGORY(LogOculusPluginWrapper);
|
||
|
|
||
|
static void* LoadEntryPoint(void* handle, const char* EntryPointName);
|
||
|
|
||
|
bool OculusPluginWrapper::InitializeOculusPluginWrapper(OculusPluginWrapper* wrapper)
|
||
|
{
|
||
|
if (wrapper->IsInitialized())
|
||
|
{
|
||
|
UE_LOG(LogOculusPluginWrapper, Warning, TEXT("wrapper already initialized"));
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
#if OCULUS_HMD_SUPPORTED_PLATFORMS
|
||
|
void* LibraryHandle = nullptr;
|
||
|
|
||
|
#if PLATFORM_ANDROID
|
||
|
const bool VersionValid = FAndroidMisc::GetAndroidBuildVersion() >= MIN_SDK_VERSION;
|
||
|
#else
|
||
|
const bool VersionValid = true;
|
||
|
#endif
|
||
|
|
||
|
if (VersionValid)
|
||
|
{
|
||
|
LibraryHandle = FOculusXRHMDModule::GetOVRPluginHandle();
|
||
|
if (LibraryHandle == nullptr)
|
||
|
{
|
||
|
UE_LOG(LogOculusPluginWrapper, Warning, TEXT("GetOVRPluginHandle() returned NULL"));
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
#else
|
||
|
return false;
|
||
|
#endif
|
||
|
|
||
|
struct OculusEntryPoint
|
||
|
{
|
||
|
const char* EntryPointName;
|
||
|
void** EntryPointPtr;
|
||
|
};
|
||
|
|
||
|
#define OCULUS_BIND_ENTRY_POINT(Func) { "ovrp_" #Func, (void**)&wrapper->Func }
|
||
|
|
||
|
OculusEntryPoint entryPointArray[] = {
|
||
|
// OVR_Plugin.h
|
||
|
|
||
|
OCULUS_BIND_ENTRY_POINT(PreInitialize5),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetInitialized),
|
||
|
OCULUS_BIND_ENTRY_POINT(Initialize7),
|
||
|
OCULUS_BIND_ENTRY_POINT(Shutdown2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetLogCallback2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetVersion2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNativeSDKVersion2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNativeSDKPointer2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetDisplayAdapterId2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAudioOutId2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAudioOutDeviceId2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAudioInId2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAudioInDeviceId2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetInstanceExtensionsVk),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetDeviceExtensionsVk),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetupDistortionWindow3),
|
||
|
OCULUS_BIND_ENTRY_POINT(DestroyDistortionWindow2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetDominantHand),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetRemoteHandedness),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetColorScaleAndOffset),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetupLayer),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetupLayerDepth),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetEyeFovPremultipliedAlphaMode),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEyeFovLayerId),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetLayerTextureStageCount),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetLayerTexture2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetLayerTextureFoveation),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetLayerOcclusionMesh),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetLayerAndroidSurfaceObject),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetLayerTextureSpaceWarp),
|
||
|
OCULUS_BIND_ENTRY_POINT(CalculateEyeLayerDesc3),
|
||
|
OCULUS_BIND_ENTRY_POINT(DestroyLayer),
|
||
|
OCULUS_BIND_ENTRY_POINT(CalculateLayerDesc),
|
||
|
OCULUS_BIND_ENTRY_POINT(CalculateEyeLayerDesc2),
|
||
|
OCULUS_BIND_ENTRY_POINT(CalculateEyePreviewRect),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetupMirrorTexture2),
|
||
|
OCULUS_BIND_ENTRY_POINT(DestroyMirrorTexture2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAdaptiveGpuPerformanceScale2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppCpuStartToGpuEndTime2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEyePixelsPerTanAngleAtCenter2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetHmdToEyeOffset2),
|
||
|
OCULUS_BIND_ENTRY_POINT(Update3),
|
||
|
OCULUS_BIND_ENTRY_POINT(WaitToBeginFrame),
|
||
|
OCULUS_BIND_ENTRY_POINT(BeginFrame4),
|
||
|
OCULUS_BIND_ENTRY_POINT(UpdateFoveation),
|
||
|
OCULUS_BIND_ENTRY_POINT(EndFrame4),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTrackingOrientationSupported2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTrackingOrientationEnabled2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetTrackingOrientationEnabled2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTrackingPositionSupported2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTrackingPositionEnabled2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetTrackingPositionEnabled2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTrackingIPDEnabled2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetTrackingIPDEnabled2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTrackingCalibratedOrigin2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetTrackingCalibratedOrigin2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTrackingOriginType2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetTrackingOriginType2),
|
||
|
OCULUS_BIND_ENTRY_POINT(RecenterTrackingOrigin2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNodePresent2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNodeOrientationTracked2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNodeOrientationValid),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNodePositionTracked2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNodePositionValid),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetNodePositionTracked2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNodePoseState3),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNodePoseStateRaw),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNodeFrustum2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetHeadPoseModifier),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetHeadPoseModifier),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetControllerState4),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetControllerState5),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetControllerState6),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetActiveController2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetConnectedControllers2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetControllerVibration2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetControllerLocalizedVibration),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetControllerHapticsAmplitudeEnvelope),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetControllerHapticsPcm),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetControllerHapticsDesc2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetControllerHapticsState2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetControllerSampleRateHz),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetControllerHaptics2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetSuggestedCpuPerformanceLevel),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSuggestedCpuPerformanceLevel),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetSuggestedGpuPerformanceLevel),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSuggestedGpuPerformanceLevel),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppCPUPriority2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetAppCPUPriority2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemPowerSavingMode2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemDisplayFrequency2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemDisplayAvailableFrequencies),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetSystemDisplayFrequency),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemVSyncCount2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetSystemVSyncCount2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemProductName2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemRegion2),
|
||
|
OCULUS_BIND_ENTRY_POINT(ShowSystemUI2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppHasVrFocus2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppHasInputFocus),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppHasSystemOverlayPresent),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppShouldQuit2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppShouldRecenter2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppShouldRecreateDistortionWindow2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppLatencyTimings2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetAppEngineInfo2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetUserPresent2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetUserIPD2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetUserIPD2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetUserEyeHeight2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetUserEyeHeight2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetUserNeckEyeDistance2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetUserNeckEyeDistance2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetupDisplayObjects2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemMultiViewSupported2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEyeTextureArraySupported2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetBoundaryConfigured2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetDepthCompositingSupported),
|
||
|
OCULUS_BIND_ENTRY_POINT(TestBoundaryNode2),
|
||
|
OCULUS_BIND_ENTRY_POINT(TestBoundaryPoint2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetBoundaryGeometry3),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetBoundaryDimensions2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetBoundaryVisible2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetBoundaryVisible2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemHeadsetType2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppPerfStats2),
|
||
|
OCULUS_BIND_ENTRY_POINT(ResetAppPerfStats2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetAppFramerate2),
|
||
|
OCULUS_BIND_ENTRY_POINT(IsPerfMetricsSupported),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetPerfMetricsFloat),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetPerfMetricsInt),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetHandNodePoseStateLatency),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetHandNodePoseStateLatency),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemRecommendedMSAALevel2),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetInhibitSystemUX2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTiledMultiResSupported),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTiledMultiResLevel),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetTiledMultiResLevel),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTiledMultiResDynamic),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetTiledMultiResDynamic),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetFoveationEyeTrackedSupported),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetFoveationEyeTracked),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetFoveationEyeTracked),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetFoveationEyeTrackedCenter),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetGPUUtilSupported),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetGPUUtilLevel),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetThreadPerformance),
|
||
|
OCULUS_BIND_ENTRY_POINT(AutoThreadScheduling),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetGPUFrameTime),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetViewportStencil),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetDeveloperTelemetryConsent),
|
||
|
OCULUS_BIND_ENTRY_POINT(SendEvent),
|
||
|
OCULUS_BIND_ENTRY_POINT(SendEvent2),
|
||
|
OCULUS_BIND_ENTRY_POINT(AddCustomMetadata),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetDeveloperMode),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetCurrentTrackingTransformPose),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTrackingTransformRawPose),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTrackingTransformRelativePose),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetTimeInSeconds),
|
||
|
//OCULUS_BIND_ENTRY_POINT(GetPTWNear),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetASWVelocityScale),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetASWDepthScale),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetASWAdaptiveMode),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetASWAdaptiveMode),
|
||
|
OCULUS_BIND_ENTRY_POINT(IsRequestingASWData),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetPredictedDisplayTime),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetHandTrackingEnabled),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetHandState),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetHandState2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSkeleton2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetMesh),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetLocalTrackingSpaceRecenterCount),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemHmd3DofModeEnabled),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetClientColorDesc),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetHmdColorDesc),
|
||
|
OCULUS_BIND_ENTRY_POINT(PollEvent),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetNativeXrApiType),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetLocalDimmingSupported),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetLocalDimming),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetCurrentInteractionProfile),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetLayerRecommendedResolution),
|
||
|
OCULUS_BIND_ENTRY_POINT(IsLayerShapeSupported),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetEyeBufferSharpenType),
|
||
|
|
||
|
OCULUS_BIND_ENTRY_POINT(InitializeEnvironmentDepth),
|
||
|
OCULUS_BIND_ENTRY_POINT(DestroyEnvironmentDepth),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEnvironmentDepthTextureDesc),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEnvironmentDepthTextureStageCount),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEnvironmentDepthTexture),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetEnvironmentDepthHandRemoval),
|
||
|
OCULUS_BIND_ENTRY_POINT(StartEnvironmentDepth),
|
||
|
OCULUS_BIND_ENTRY_POINT(StopEnvironmentDepth),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEnvironmentDepthFrameDesc),
|
||
|
|
||
|
#ifndef OVRPLUGIN_JNI_LIB_EXCLUDED
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemVolume2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSystemHeadphonesPresent2),
|
||
|
#endif
|
||
|
|
||
|
// Anchors
|
||
|
OCULUS_BIND_ENTRY_POINT(LocateSpace),
|
||
|
OCULUS_BIND_ENTRY_POINT(LocateSpace2),
|
||
|
OCULUS_BIND_ENTRY_POINT(CreateSpatialAnchor),
|
||
|
OCULUS_BIND_ENTRY_POINT(DestroySpace),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetSpaceComponentStatus),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSpaceComponentStatus),
|
||
|
OCULUS_BIND_ENTRY_POINT(EnumerateSpaceSupportedComponents),
|
||
|
OCULUS_BIND_ENTRY_POINT(QuerySpaces),
|
||
|
OCULUS_BIND_ENTRY_POINT(RetrieveSpaceQueryResults),
|
||
|
OCULUS_BIND_ENTRY_POINT(SaveSpace),
|
||
|
OCULUS_BIND_ENTRY_POINT(EraseSpace),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSpaceUuid),
|
||
|
OCULUS_BIND_ENTRY_POINT(SaveSpaceList),
|
||
|
OCULUS_BIND_ENTRY_POINT(ShareSpaces),
|
||
|
OCULUS_BIND_ENTRY_POINT(CreateSpaceUser),
|
||
|
OCULUS_BIND_ENTRY_POINT(DestroySpaceUser),
|
||
|
|
||
|
|
||
|
// Scene
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSpaceContainer),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSpaceBoundingBox2D),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSpaceBoundingBox3D),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSpaceSemanticLabels),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSpaceRoomLayout),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSpaceBoundary2D),
|
||
|
OCULUS_BIND_ENTRY_POINT(RequestSceneCapture),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetSpaceTriangleMesh),
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// MovementSDK
|
||
|
OCULUS_BIND_ENTRY_POINT(GetBodyTrackingEnabled),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetBodyTrackingSupported),
|
||
|
OCULUS_BIND_ENTRY_POINT(StopBodyTracking),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetBodyState4),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetFullBodyTrackingEnabled),
|
||
|
OCULUS_BIND_ENTRY_POINT(StartBodyTracking2),
|
||
|
OCULUS_BIND_ENTRY_POINT(RequestBodyTrackingFidelity),
|
||
|
OCULUS_BIND_ENTRY_POINT(ResetBodyTrackingCalibration),
|
||
|
OCULUS_BIND_ENTRY_POINT(SuggestBodyTrackingCalibrationOverride),
|
||
|
|
||
|
OCULUS_BIND_ENTRY_POINT(GetFaceTracking2Enabled),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetFaceTracking2Supported),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetFaceState2),
|
||
|
OCULUS_BIND_ENTRY_POINT(StartFaceTracking2),
|
||
|
OCULUS_BIND_ENTRY_POINT(StopFaceTracking2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEyeTrackingEnabled),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEyeTrackingSupported),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetEyeGazesState),
|
||
|
OCULUS_BIND_ENTRY_POINT(StartEyeTracking),
|
||
|
OCULUS_BIND_ENTRY_POINT(StopEyeTracking),
|
||
|
|
||
|
// QPL
|
||
|
OCULUS_BIND_ENTRY_POINT(QplMarkerStart),
|
||
|
OCULUS_BIND_ENTRY_POINT(QplMarkerEnd),
|
||
|
OCULUS_BIND_ENTRY_POINT(QplMarkerPoint),
|
||
|
OCULUS_BIND_ENTRY_POINT(QplMarkerPointCached),
|
||
|
OCULUS_BIND_ENTRY_POINT(QplMarkerAnnotation),
|
||
|
OCULUS_BIND_ENTRY_POINT(QplCreateMarkerHandle),
|
||
|
OCULUS_BIND_ENTRY_POINT(QplDestroyMarkerHandle),
|
||
|
OCULUS_BIND_ENTRY_POINT(OnEditorShutdown),
|
||
|
OCULUS_BIND_ENTRY_POINT(QplSetConsent),
|
||
|
|
||
|
// OVR_Plugin_Insight.h
|
||
|
OCULUS_BIND_ENTRY_POINT(InitializeInsightPassthrough),
|
||
|
OCULUS_BIND_ENTRY_POINT(ShutdownInsightPassthrough),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetInsightPassthroughInitialized),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetInsightPassthroughInitializationState),
|
||
|
OCULUS_BIND_ENTRY_POINT(CreateInsightTriangleMesh),
|
||
|
OCULUS_BIND_ENTRY_POINT(DestroyInsightTriangleMesh),
|
||
|
OCULUS_BIND_ENTRY_POINT(AddInsightPassthroughSurfaceGeometry),
|
||
|
OCULUS_BIND_ENTRY_POINT(DestroyInsightPassthroughGeometryInstance),
|
||
|
OCULUS_BIND_ENTRY_POINT(UpdateInsightPassthroughGeometryTransform),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetInsightPassthroughStyle),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetInsightPassthroughStyle2),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetPassthroughCapabilityFlags),
|
||
|
OCULUS_BIND_ENTRY_POINT(CreatePassthroughColorLut),
|
||
|
OCULUS_BIND_ENTRY_POINT(DestroyPassthroughColorLut),
|
||
|
OCULUS_BIND_ENTRY_POINT(UpdatePassthroughColorLut),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetPassthroughCapabilities),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetPassthroughPreferences),
|
||
|
|
||
|
// OVR_Plugin_MixedReality.h
|
||
|
|
||
|
OCULUS_BIND_ENTRY_POINT(InitializeMixedReality),
|
||
|
OCULUS_BIND_ENTRY_POINT(ShutdownMixedReality),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetMixedRealityInitialized),
|
||
|
OCULUS_BIND_ENTRY_POINT(UpdateExternalCamera),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetExternalCameraCount),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetExternalCameraName),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetExternalCameraIntrinsics),
|
||
|
OCULUS_BIND_ENTRY_POINT(GetExternalCameraExtrinsics),
|
||
|
|
||
|
// OVR_Plugin_Media.h
|
||
|
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_Initialize),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_Shutdown),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetInitialized),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_Update),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetMrcActivationMode),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetMrcActivationMode),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_IsMrcEnabled),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_IsMrcActivated),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_UseMrcDebugCamera),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetMrcInputVideoBufferType),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetMrcInputVideoBufferType),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetMrcFrameSize),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetMrcFrameSize),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetMrcAudioSampleRate),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetMrcAudioSampleRate),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetMrcFrameImageFlipped),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetMrcFrameImageFlipped),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetMrcFrameInverseAlpha),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetMrcFrameInverseAlpha),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetAvailableQueueIndexVulkan),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_EncodeMrcFrame),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_EncodeMrcFrameWithDualTextures),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SyncMrcFrame),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_EncodeMrcFrameWithPoseTime),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_EncodeMrcFrameDualTexturesWithPoseTime),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetHeadsetControllerPose),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_EnumerateCameraAnchorHandles),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetCurrentCameraAnchorHandle),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetCameraAnchorName),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetCameraAnchorHandle),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetCameraAnchorType),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_CreateCustomCameraAnchor),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_DestroyCustomCameraAnchor),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetCustomCameraAnchorPose),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetCustomCameraAnchorPose),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_GetCameraMinMaxDistance),
|
||
|
OCULUS_BIND_ENTRY_POINT(Media_SetCameraMinMaxDistance),
|
||
|
|
||
|
OCULUS_BIND_ENTRY_POINT(SetControllerDrivenHandPoses),
|
||
|
OCULUS_BIND_ENTRY_POINT(SetControllerDrivenHandPosesAreNatural),
|
||
|
};
|
||
|
|
||
|
#undef OCULUS_BIND_ENTRY_POINT
|
||
|
|
||
|
bool result = true;
|
||
|
for (int i = 0; i < UE_ARRAY_COUNT(entryPointArray); ++i)
|
||
|
{
|
||
|
*(entryPointArray[i].EntryPointPtr) = LoadEntryPoint(LibraryHandle, entryPointArray[i].EntryPointName);
|
||
|
|
||
|
if (*entryPointArray[i].EntryPointPtr == nullptr)
|
||
|
{
|
||
|
UE_LOG(LogOculusPluginWrapper, Error, TEXT("OculusPlugin EntryPoint could not be loaded: %s"), ANSI_TO_TCHAR(entryPointArray[i].EntryPointName));
|
||
|
result = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
wrapper->Initialized = true;
|
||
|
|
||
|
if (result)
|
||
|
{
|
||
|
UE_LOG(LogOculusPluginWrapper, Log, TEXT("OculusPlugin initialized successfully"));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
DestroyOculusPluginWrapper(wrapper);
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
void OculusPluginWrapper::DestroyOculusPluginWrapper(OculusPluginWrapper* wrapper)
|
||
|
{
|
||
|
if (!wrapper->Initialized)
|
||
|
return;
|
||
|
|
||
|
wrapper->Reset();
|
||
|
|
||
|
UE_LOG(LogOculusPluginWrapper, Log, TEXT("OculusPlugin destroyed successfully"));
|
||
|
}
|
||
|
|
||
|
static void* LoadEntryPoint(void* Handle, const char* EntryPointName)
|
||
|
{
|
||
|
if (Handle == nullptr)
|
||
|
return nullptr;
|
||
|
|
||
|
#if PLATFORM_WINDOWS
|
||
|
void* ptr = GetProcAddress((HMODULE)Handle, EntryPointName);
|
||
|
if (ptr == nullptr)
|
||
|
{
|
||
|
UE_LOG(LogOculusPluginWrapper, Error, TEXT("Unable to load entry point: %s"), ANSI_TO_TCHAR(EntryPointName));
|
||
|
}
|
||
|
return ptr;
|
||
|
#elif PLATFORM_ANDROID
|
||
|
void* ptr = dlsym(Handle, EntryPointName);
|
||
|
if (ptr == nullptr)
|
||
|
{
|
||
|
UE_LOG(LogOculusPluginWrapper, Error, TEXT("Unable to load entry point: %s, error %s"), ANSI_TO_TCHAR(EntryPointName), ANSI_TO_TCHAR(dlerror()));
|
||
|
}
|
||
|
return ptr;
|
||
|
#else
|
||
|
UE_LOG(LogOculusPluginWrapper, Error, TEXT("LoadEntryPoint: Unsupported platform"));
|
||
|
return nullptr;
|
||
|
#endif
|
||
|
}
|