October3d55/M/PICOOpen7991a2a23d57V5/Source/PICOOpenXRMR/Private/PICO_SpatialAnchor.h

85 lines
4.4 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include <openxr/pico_spatial_anchor.h>
#include <openxr/pico_spatial_anchor_sharing.h>
#include "CoreMinimal.h"
#include "PICO_AnchorComponent.h"
#include "PICO_MR.h"
class FSpatialAnchorExtensionPICO : public FMixedRealityPICO
{
public:
FSpatialAnchorExtensionPICO();
virtual ~FSpatialAnchorExtensionPICO() {}
/** IOpenXRExtensionPlugin implementation */
virtual FString GetDisplayName() override
{
return FString(TEXT("SpatialAnchorPICO"));
}
virtual bool GetOptionalExtensions(TArray<const ANSICHAR*>& OutExtensions) override;
virtual void PostGetSystem(XrInstance InInstance, XrSystemId InSystem) override;
virtual void PostCreateSession(XrSession InSession) override;
static FSpatialAnchorExtensionPICO* GetInstance()
{
static FSpatialAnchorExtensionPICO Instance;
return &Instance;
}
virtual bool CreateProvider(const FSenseDataProviderCreateInfoBasePICO& CreateInfo,EResultPICO& OutResult) override;
bool CreateSpatialAnchorAsync(const FPICOPollFutureDelegate& Delegate,const FTransform& InAnchorEntityTransform,EResultPICO& OutResult);
bool PersistSpatialAnchorAsync(AActor* BoundActor, EPersistLocationPICO PersistLocation, const FPICOPollFutureDelegate& Delegate,EResultPICO& OutResult);
bool UnpersistSpatialAnchorAsync(AActor* BoundActor,const FPICOPollFutureDelegate& Delegate,EResultPICO& OutResult);
bool ShareSpatialAnchorAsync(AActor* BoundActor,const FPICOPollFutureDelegate& Delegate,EResultPICO& OutResult);
bool LoadAnchorEntityAsync(const FAnchorLoadInfoPICO& LoadInfo, const FPICOPollFutureDelegate& Delegate,EResultPICO& OutResult);
bool DownloadSharedSpatialAnchorsAsync(const FAnchorLoadInfoPICO& LoadInfo,const FPICOPollFutureDelegate& Delegate,TSet<XrFutureEXT>& HandleSet,EResultPICO& OutResult);
bool CreateSpatialAnchorComplete(const XrFutureEXT& FutureHandle, FSpatialAnchorCreateCompletionPICO& completion,EResultPICO& OutResult);
bool PersistSpatialAnchorComplete(const XrFutureEXT& FutureHandle, FSpatialAnchorPersistCompletionPICO& completion,EResultPICO& OutResult);
bool UnpersistSpatialAnchorComplete(const XrFutureEXT& FutureHandle, FSpatialAnchorUnpersistCompletionPICO& completion,EResultPICO& OutResult);
bool ShareSpatialAnchorComplete(const XrFutureEXT& FutureHandle, FSpatialAnchorShareCompletionPICO& completion,EResultPICO& OutResult);
bool DownloadSharedSpatialAnchorsComplete(const XrFutureEXT& FutureHandle, FSharedSpatialAnchorDownloadCompletionPICO& completion,EResultPICO& OutResult);
bool GetAnchorLoadResults(const XrFutureEXT& FutureHandle,TArray<FAnchorLoadResultPICO>& LoadResult,EResultPICO& OutResult);
bool DestroyAnchorByHandle(const FSpatialHandlePICO& AnchorHandle,EResultPICO& OutResult);
bool GetAnchorEntityUUID(UAnchorComponentPICO* AnchorComponent, FSpatialUUIDPICO& OutAnchorUUID,EResultPICO& OutResult);
bool GetAnchorPose(UAnchorComponentPICO* AnchorComponent, FTransform& OutAnchorPose,EResultPICO& OutResult);
bool UpdateAnchor(UAnchorComponentPICO* AnchorComponent);
private:
// XR_PICO_spatial_anchor
PFN_xrCreateSpatialAnchorAsyncPICO xrCreateSpatialAnchorAsyncPICO = nullptr;
PFN_xrCreateSpatialAnchorCompletePICO xrCreateSpatialAnchorCompletePICO = nullptr;
PFN_xrPersistSpatialAnchorAsyncPICO xrPersistSpatialAnchorAsyncPICO = nullptr;
PFN_xrPersistSpatialAnchorCompletePICO xrPersistSpatialAnchorCompletePICO = nullptr;
PFN_xrUnpersistSpatialAnchorAsyncPICO xrUnpersistSpatialAnchorAsyncPICO = nullptr;
PFN_xrUnpersistSpatialAnchorCompletePICO xrUnpersistSpatialAnchorCompletePICO = nullptr;
// XR_PICO_spatial_anchor_sharing
PFN_xrShareSpatialAnchorAsyncPICO xrShareSpatialAnchorAsyncPICO = nullptr;
PFN_xrShareSpatialAnchorCompletePICO xrShareSpatialAnchorCompletePICO = nullptr;
PFN_xrDownloadSharedSpatialAnchorAsyncPICO xrDownloadSharedSpatialAnchorAsyncPICO = nullptr;
PFN_xrDownloadSharedSpatialAnchorCompletePICO xrDownloadSharedSpatialAnchorCompletePICO = nullptr;
bool IsAnchorValid(AActor* BoundActor);
bool IsAnchorValid(UAnchorComponentPICO* AnchorComponent);
UAnchorComponentPICO* GetAnchorComponent(AActor* BoundActor);
TMap<FSpatialUUIDPICO,FSpatialHandlePICO> UUIDToAnchorHandleMap;
bool bSupportsSpatialAnchorEXT = false;
bool bSupportsSpatialAnchor = false;
bool bSupportsSpatialAnchorSharingEXT = false;
bool bSupportsSpatialAnchorSharing = false;
};