You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#rnx #rb none #ROBOMERGE-OWNER: ryan.durand #ROBOMERGE-AUTHOR: ryan.durand #ROBOMERGE-SOURCE: CL 10869210 via CL 10869511 via CL 10869900 #ROBOMERGE-BOT: (v613-10869866) [CL 10870549 by ryan durand in Main branch]
79 lines
3.4 KiB
C++
79 lines
3.4 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "UObject/ObjectMacros.h"
|
|
#include "Features/IModularFeature.h"
|
|
#include "IIdentifiableXRDevice.h" // for IXRSystemIdentifier
|
|
|
|
class UPrimitiveComponent;
|
|
class AActor;
|
|
enum class EControllerHand : uint8;
|
|
|
|
DECLARE_DELEGATE_OneParam(FXRComponentLoadComplete, UPrimitiveComponent*);
|
|
|
|
class HEADMOUNTEDDISPLAY_API IXRSystemAssets : public IModularFeature, public IXRSystemIdentifier
|
|
{
|
|
public:
|
|
static FName GetModularFeatureName()
|
|
{
|
|
static FName FeatureName = FName(TEXT("XRSystemAssets"));
|
|
return FeatureName;
|
|
}
|
|
|
|
/**
|
|
* Fills out a device list with unique identifiers that can be used
|
|
* to reference system specific devices.
|
|
*
|
|
* These IDs are intended to be used with certain methods to reference a
|
|
* specific device (like with CreateRenderComponent(), etc.).
|
|
* NOTE: that these IDs are NOT interoperable across XR systems (vive vs. oculus,
|
|
* etc.). Using an ID from one system with another will have undefined results.
|
|
*
|
|
* @param DeviceListOut A list of
|
|
*
|
|
* @return True if the DeviceList was successfully updated, otherwise false.
|
|
*/
|
|
virtual bool EnumerateRenderableDevices(TArray<int32>& DeviceListOut) = 0;
|
|
|
|
/**
|
|
* Provides a mapping for MotionControllers, so we can identify the device ID
|
|
* used for a specific hand (which in turn can be used in other functions,
|
|
* like CreateRenderComponent, etc.).
|
|
*
|
|
* NOTE: Some systems will not have an explicit mapping until the device is
|
|
* on and registered. In that case, this function will return an
|
|
* invalid device ID.
|
|
*
|
|
* NOTE: Not all XR systems support every EControllerHand value. If that's
|
|
* the case, then this will return an invalid device ID, though that
|
|
* specific value is undetermined and up to each XRSystem for
|
|
* interpretation.
|
|
*
|
|
* @param ControllerHand The UE specific hand identifier you want a system specific device ID for.
|
|
*
|
|
* @return A device ID that is specific to this XRSystem (can only be interpreted by other members belonging to the same IXRSystemIdentifier)
|
|
*/
|
|
virtual int32 GetDeviceId(EControllerHand ControllerHand) = 0;
|
|
|
|
/**
|
|
* Attempts to spawn a renderable component for the specified device. Returns
|
|
* a component that needs to be attached and registered by the caller.
|
|
*
|
|
* NOTE: Resource loads for this component may be asynchronous. The
|
|
* component can be attached and registered immediately, but there may
|
|
* be a delay before it renders properly. To make the operation
|
|
* synchronous use the bForceSynchronous param.
|
|
*
|
|
* @param DeviceId Uniquely identifies the XR device you want to render.
|
|
* @param Owner The actor which this component will be attached to.
|
|
* @param Flags Object creation flags to spawn the component with.
|
|
* @param bForceSynchronous Forces the any associated resource loads to complete before returning.
|
|
* @param OnLoadComplete Model load callback, useful for when the load is asynchronous - should be triggered for synchronous loads as well.
|
|
*
|
|
* @return A valid component pointer if the method succeeded, otherwise null.
|
|
*/
|
|
virtual UPrimitiveComponent* CreateRenderComponent(const int32 DeviceId, AActor* Owner, EObjectFlags Flags, const bool bForceSynchronous = false, const FXRComponentLoadComplete& OnLoadComplete = FXRComponentLoadComplete()) = 0;
|
|
};
|