394 lines
14 KiB
C++
394 lines
14 KiB
C++
|
|
// Copyright PICO Technology Co., Ltd. All rights reserved.
|
||
|
|
// This plugin incorporates portions of the Unreal® Engine. Unreal® is a trademark or registered trademark of Epic Games, Inc. in the United States of America and elsewhere.
|
||
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
||
|
|
|
||
|
|
#include "PXR_PluginWrapper.h"
|
||
|
|
#include "PXR_HMDModule.h"
|
||
|
|
|
||
|
|
#if PLATFORM_ANDROID
|
||
|
|
#include <dlfcn.h>
|
||
|
|
#endif
|
||
|
|
|
||
|
|
DEFINE_LOG_CATEGORY(LogPICOPluginWrapper);
|
||
|
|
|
||
|
|
static void* LoadEntryPoint(void* handle, const char* EntryPointName);
|
||
|
|
|
||
|
|
bool InitializePICOPluginWrapper(PICOPluginWrapper* wrapper)
|
||
|
|
{
|
||
|
|
if (wrapper->Initialized)
|
||
|
|
{
|
||
|
|
UE_LOG(LogPICOPluginWrapper, Warning, TEXT("wrapper already initialized"));
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
#if PICO_HMD_SUPPORTED_PLATFORMS
|
||
|
|
void* LibraryHandle = nullptr;
|
||
|
|
|
||
|
|
#if PLATFORM_ANDROID
|
||
|
|
const bool VersionValid = FAndroidMisc::GetAndroidBuildVersion() > 23;
|
||
|
|
#else
|
||
|
|
const bool VersionValid = true;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
if (VersionValid)
|
||
|
|
{
|
||
|
|
LibraryHandle = FPICOXRHMDModule::GetPVRPluginHandle();
|
||
|
|
if (LibraryHandle == nullptr)
|
||
|
|
{
|
||
|
|
UE_LOG(LogPICOPluginWrapper, Warning, TEXT("GetPVRPluginHandle() returned NULL"));
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
return false;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
struct PICOEntryPoint
|
||
|
|
{
|
||
|
|
const char* EntryPointName;
|
||
|
|
void** EntryPointPtr;
|
||
|
|
};
|
||
|
|
|
||
|
|
#define PICO_BIND_ENTRY_POINT(Func) { "Pxr_"#Func, (void**)&wrapper->Func }
|
||
|
|
|
||
|
|
PICOEntryPoint entryPointArray[] =
|
||
|
|
{
|
||
|
|
// PXRPlugin.h
|
||
|
|
PICO_BIND_ENTRY_POINT(SetGraphicOption),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetPlatformOption),
|
||
|
|
PICO_BIND_ENTRY_POINT(IsInitialized),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetInitializeData),
|
||
|
|
PICO_BIND_ENTRY_POINT(Initialize),
|
||
|
|
PICO_BIND_ENTRY_POINT(Shutdown),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetDeviceExtensionsVk),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetInstanceExtensionsVk),
|
||
|
|
PICO_BIND_ENTRY_POINT(CreateVulkanSystem),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFeatureSupported),
|
||
|
|
PICO_BIND_ENTRY_POINT(CreateLayer),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetLayerImageCount),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetLayerImageExt),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetLayerImage),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetLayerNextImageIndex),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetLayerFoveationImage),
|
||
|
|
PICO_BIND_ENTRY_POINT(DestroyLayer),
|
||
|
|
PICO_BIND_ENTRY_POINT(IsRunning),
|
||
|
|
PICO_BIND_ENTRY_POINT(BeginXr),
|
||
|
|
PICO_BIND_ENTRY_POINT(EndXr),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetPredictedDisplayTime),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetPredictedMainSensorState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetPredictedMainSensorState2),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetPredictedMainSensorStateWithEyePose),
|
||
|
|
PICO_BIND_ENTRY_POINT(ResetSensor),
|
||
|
|
PICO_BIND_ENTRY_POINT(WaitFrame),
|
||
|
|
PICO_BIND_ENTRY_POINT(BeginFrame),
|
||
|
|
PICO_BIND_ENTRY_POINT(SubmitLayer),
|
||
|
|
PICO_BIND_ENTRY_POINT(SubmitLayer2),
|
||
|
|
PICO_BIND_ENTRY_POINT(EndFrame),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetDeviceName),
|
||
|
|
PICO_BIND_ENTRY_POINT(PollEvent),
|
||
|
|
PICO_BIND_ENTRY_POINT(LogPrint),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFov),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFrustum),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetPerformanceLevels),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetPerformanceLevels),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetColorSpace),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFoveationLevel),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetFoveationLevel),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetFoveationParams),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetTrackingMode),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetTrackingMode),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeTrackingData),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFaceTrackingData),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetTrackingOrigin),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetTrackingOrigin),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetIPD),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeOrientation),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAppHasFocus),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetConfigInt),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetConfigFloat),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetConfigFloatArray),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetConfigInt),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetConfigString),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetConfigUint64),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBoundaryConfigured),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBoundaryEnabled),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetBoundaryVisible),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetSeeThroughBackground),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBoundaryVisible),
|
||
|
|
PICO_BIND_ENTRY_POINT(TestNodeIsInBoundary),
|
||
|
|
PICO_BIND_ENTRY_POINT(TestPointIsInBoundary),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBoundaryGeometry),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBoundaryDimensions),
|
||
|
|
PICO_BIND_ENTRY_POINT(EnableMultiview),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetExternalCameraInfo),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetExternalCameraPose),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetIsSupportMovingMrc),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetSensorLostCustomMode),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetSensorLostCMST),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetDisplayRefreshRatesAvailable),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetDisplayRefreshRate),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetDisplayRefreshRate),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetExtraLatencyMode),
|
||
|
|
PICO_BIND_ENTRY_POINT(getPsensorState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetControllerCapabilities),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetControllerConnectStatus),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetControllerTrackingState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetControllerInputState),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetControllerVibration),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetControllerVibrationEvent),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetControllerEnableKey),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetControllerMainInputHandle),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetControllerMainInputHandle),
|
||
|
|
PICO_BIND_ENTRY_POINT(StopControllerVCMotor),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartControllerVCMotor),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetControllerAmp),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetControllerDelay),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetVibrateDelayTime),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartVibrateBySharemF),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartVibrateBySharemU),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartVibrateByCache),
|
||
|
|
PICO_BIND_ENTRY_POINT(ClearVibrateByCache),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartVibrateByPHF),
|
||
|
|
PICO_BIND_ENTRY_POINT(PauseVibrate),
|
||
|
|
PICO_BIND_ENTRY_POINT(ResumeVibrate),
|
||
|
|
PICO_BIND_ENTRY_POINT(UpdateVibrateParams),
|
||
|
|
PICO_BIND_ENTRY_POINT(CreateHapticStream),
|
||
|
|
PICO_BIND_ENTRY_POINT(WriteHapticStream),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetPHFHapticSpeed),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetPHFHapticSpeed),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetCurrentFrameSequence),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartPHFHaptic),
|
||
|
|
PICO_BIND_ENTRY_POINT(StopPHFHaptic),
|
||
|
|
PICO_BIND_ENTRY_POINT(RemovePHFHaptic),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetAppHandTrackingEnabled),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetHandTrackerSettingState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetHandTrackerActiveInputType),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetHandTrackerJointLocations),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetHandTrackerAimState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetHandTrackerAimStateWithPTFG),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetHandTrackerJointLocationsWithPTFG),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetHandTrackerAimStateWithPT),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetHandTrackerJointLocationsWithPT),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetHandTrackerHandScale),
|
||
|
|
PICO_BIND_ENTRY_POINT(ResetController),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetArmModelParameters),
|
||
|
|
PICO_BIND_ENTRY_POINT(LogSdkApi),
|
||
|
|
|
||
|
|
PICO_BIND_ENTRY_POINT(GetControllerHandness),
|
||
|
|
//----------------Body Tracking-------
|
||
|
|
PICO_BIND_ENTRY_POINT(SetBodyTrackingStaticCalibState),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetBodyTrackingMode),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBodyTrackingPose),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBodyTrackingImuData),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFitnessBandConnectState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFitnessBandBattery),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFitnessBandCalibState),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetBodyTrackingAlgParam),
|
||
|
|
//----------------Body Tracking-------
|
||
|
|
|
||
|
|
//----------------Eye Tracking-------
|
||
|
|
PICO_BIND_ENTRY_POINT(WantEyeTrackingService),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeTrackingSupported),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartEyeTracking1),
|
||
|
|
PICO_BIND_ENTRY_POINT(StopEyeTracking1),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeTrackingState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeTrackingData1),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeOpenness),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyePupilInfo),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetPerEyePose),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeBlink),
|
||
|
|
//----------------Eye Tracking-------
|
||
|
|
|
||
|
|
//----------------Face Tracking-------
|
||
|
|
PICO_BIND_ENTRY_POINT(WantFaceTrackingService),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFaceTrackingSupported),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartFaceTracking),
|
||
|
|
PICO_BIND_ENTRY_POINT(StopFaceTracking),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFaceTrackingState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetFaceTrackingData1),
|
||
|
|
//----------------Face Tracking-------
|
||
|
|
|
||
|
|
//----------------New Body Tracking-------
|
||
|
|
PICO_BIND_ENTRY_POINT(WantBodyTrackingService),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBodyTrackingSupported),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartBodyTracking),
|
||
|
|
PICO_BIND_ENTRY_POINT(StopBodyTracking),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBodyTrackingState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetBodyTrackingData),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartBodyTrackingCalibApp),
|
||
|
|
//----------------New Body Tracking-------
|
||
|
|
|
||
|
|
//----------------Standalone Tracker------
|
||
|
|
PICO_BIND_ENTRY_POINT(GetMotionTrackerConnectState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetMotionTrackerType),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetMotionTrackerMode),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetMotionTrackerLocations),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetMotionTrackerLocationsWithConfidence),
|
||
|
|
PICO_BIND_ENTRY_POINT(CheckMotionTrackerModeAndNumber),
|
||
|
|
//----------------Standalone Tracker------
|
||
|
|
|
||
|
|
//----------------ExtDevTracker----------------
|
||
|
|
PICO_BIND_ENTRY_POINT(GetExtDevTrackerConnectState),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetExtDevTrackerMotorVibrate),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetExtDevTrackerPassDataState),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetExtDevTrackerByPassData),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetExtDevTrackerByPassData),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetExtDevTrackerBattery),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetExtDevTrackerKeyData),
|
||
|
|
//----------------ExtDevTracker----------------
|
||
|
|
|
||
|
|
//----------------MR-------
|
||
|
|
PICO_BIND_ENTRY_POINT(CreateAnchorEntity),
|
||
|
|
PICO_BIND_ENTRY_POINT(DestroyAnchorEntity),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAnchorPose),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAnchorEntityUuid),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAnchorComponentFlags),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAnchorSceneLabel),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAnchorPlaneBoundaryInfo),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAnchorPlanePolygonInfo),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAnchorBoxInfo),
|
||
|
|
PICO_BIND_ENTRY_POINT(PersistAnchorEntity),
|
||
|
|
PICO_BIND_ENTRY_POINT(UnpersistAnchorEntity),
|
||
|
|
PICO_BIND_ENTRY_POINT(ClearPersistedAnchorEntity),
|
||
|
|
PICO_BIND_ENTRY_POINT(LoadAnchorEntity),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAnchorEntityLoadResults),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartSpatialSceneCapture),
|
||
|
|
//----------------MR-------
|
||
|
|
//----------------MR 3.0-------
|
||
|
|
/*
|
||
|
|
* future ext
|
||
|
|
*/
|
||
|
|
PICO_BIND_ENTRY_POINT(PollFutureEXT),
|
||
|
|
PICO_BIND_ENTRY_POINT(PollFutureWithProgress),
|
||
|
|
/*
|
||
|
|
* mr sdk 3.0
|
||
|
|
*/
|
||
|
|
PICO_BIND_ENTRY_POINT(CreateSenseDataProvider),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartSenseDataProviderAsync),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartSenseDataProviderComplete),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetSenseDataProviderState),
|
||
|
|
PICO_BIND_ENTRY_POINT(QuerySenseDataComplete),
|
||
|
|
PICO_BIND_ENTRY_POINT(DestroySenseDataQueryResult),
|
||
|
|
PICO_BIND_ENTRY_POINT(StopSenseDataProvider),
|
||
|
|
PICO_BIND_ENTRY_POINT(DestroySenseDataProvider),
|
||
|
|
PICO_BIND_ENTRY_POINT(QuerySenseDataAsync),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetQueriedSenseData),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetSpatialEntityUuid),
|
||
|
|
PICO_BIND_ENTRY_POINT(EnumerateSpatialEntityComponentTypes),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetSpatialEntityComponentInfo),
|
||
|
|
|
||
|
|
PICO_BIND_ENTRY_POINT(RetrieveSpatialEntityAnchor),
|
||
|
|
PICO_BIND_ENTRY_POINT(DestroyAnchor),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetAnchorUuid),
|
||
|
|
PICO_BIND_ENTRY_POINT(LocateAnchor),
|
||
|
|
|
||
|
|
PICO_BIND_ENTRY_POINT(CreateSpatialAnchorAsync),
|
||
|
|
PICO_BIND_ENTRY_POINT(CreateSpatialAnchorComplete),
|
||
|
|
PICO_BIND_ENTRY_POINT(PersistSpatialAnchorAsync),
|
||
|
|
PICO_BIND_ENTRY_POINT(PersistSpatialAnchorComplete),
|
||
|
|
PICO_BIND_ENTRY_POINT(UnpersistSpatialAnchorAsync),
|
||
|
|
PICO_BIND_ENTRY_POINT(UnpersistSpatialAnchorComplete),
|
||
|
|
|
||
|
|
/**
|
||
|
|
* mr sdk 3.0 scene capture
|
||
|
|
*/
|
||
|
|
PICO_BIND_ENTRY_POINT(StartSceneCaptureAsync),
|
||
|
|
PICO_BIND_ENTRY_POINT(StartSceneCaptureComplete),
|
||
|
|
|
||
|
|
/*
|
||
|
|
* mr sdk 3.0 cloud anchor
|
||
|
|
*/
|
||
|
|
PICO_BIND_ENTRY_POINT(ShareSpatialAnchorAsync),
|
||
|
|
PICO_BIND_ENTRY_POINT(ShareSpatialAnchorComplete),
|
||
|
|
PICO_BIND_ENTRY_POINT(DownloadSharedSpatialAnchorAsync),
|
||
|
|
PICO_BIND_ENTRY_POINT(DownloadSharedSpatialAnchorComplete),
|
||
|
|
|
||
|
|
//----------------MR 3.0-------
|
||
|
|
|
||
|
|
|
||
|
|
//----------------ETFR-------
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeTrackingFoveationRenderingSupported),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeTrackingFoveationRenderingState),
|
||
|
|
PICO_BIND_ENTRY_POINT(SetEyeTrackingFoveationRenderingState),
|
||
|
|
PICO_BIND_ENTRY_POINT(GetEyeTrackingFoveationRenderingCenter),
|
||
|
|
//----------------ETFR-------
|
||
|
|
|
||
|
|
//----------------Adaptive Resolution-------
|
||
|
|
PICO_BIND_ENTRY_POINT(UpdateAdaptiveResolution),
|
||
|
|
//----------------Adaptive Resolution-------
|
||
|
|
};
|
||
|
|
|
||
|
|
#undef PICO_BIND_ENTRY_POINT
|
||
|
|
|
||
|
|
#if PLATFORM_WINDOWS && WITH_EDITOR
|
||
|
|
bool result = true;
|
||
|
|
for (int i = 0; i < UE_ARRAY_COUNT(entryPointArray); ++i)
|
||
|
|
{
|
||
|
|
*(entryPointArray[i].EntryPointPtr) = LoadEntryPoint(LibraryHandle, entryPointArray[i].EntryPointName);
|
||
|
|
}
|
||
|
|
|
||
|
|
return result;
|
||
|
|
#else
|
||
|
|
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 == NULL)
|
||
|
|
{
|
||
|
|
//UE_LOG(LogPICOPluginWrapper, Error, TEXT("PICOPlugin EntryPoint could not be loaded: %hs"), ANSI_TO_TCHAR(entryPointArray[i].EntryPointName));
|
||
|
|
result = false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if (result)
|
||
|
|
{
|
||
|
|
UE_LOG(LogPICOPluginWrapper, Log, TEXT("PICOPlugin initialized successfully"));
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
DestroyPICOPluginWrapper(wrapper);
|
||
|
|
}
|
||
|
|
|
||
|
|
wrapper->Initialized=result;
|
||
|
|
|
||
|
|
return result;
|
||
|
|
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
void DestroyPICOPluginWrapper(PICOPluginWrapper* wrapper)
|
||
|
|
{
|
||
|
|
if (!wrapper->Initialized)
|
||
|
|
{
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
wrapper->Reset();
|
||
|
|
UE_LOG(LogPICOPluginWrapper, Log, TEXT("PICOPlugin destroyed successfully"));
|
||
|
|
}
|
||
|
|
|
||
|
|
static void* LoadEntryPoint(void* Handle, const char* EntryPointName)
|
||
|
|
{
|
||
|
|
if (Handle == nullptr)
|
||
|
|
{
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
#if PLATFORM_WINDOWS && WITH_EDITOR
|
||
|
|
void* ptr=reinterpret_cast<void*>(GetProcAddress((HMODULE)Handle, EntryPointName));
|
||
|
|
return ptr;
|
||
|
|
#elif PLATFORM_ANDROID
|
||
|
|
void* ptr = dlsym(Handle, EntryPointName);
|
||
|
|
if (ptr == nullptr)
|
||
|
|
{
|
||
|
|
UE_LOG(LogPICOPluginWrapper, Error, TEXT("Unable to load entry point: %s, error %s"), ANSI_TO_TCHAR(EntryPointName), ANSI_TO_TCHAR(dlerror()));
|
||
|
|
}
|
||
|
|
return ptr;
|
||
|
|
#else
|
||
|
|
UE_LOG(LogPICOPluginWrapper, Error, TEXT("LoadEntryPoint: Unsupported platform"));
|
||
|
|
return nullptr;
|
||
|
|
#endif
|
||
|
|
}
|