October3d55/M/PICOXRPlugin/Source/PICOXRHMD/Private/PXR_HMDRenderBridge.h

49 lines
2.4 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.
#pragma once
#include "PXR_HMDPrivate.h"
#include "CoreMinimal.h"
#include "XRSwapChain.h"
#include "RHI.h"
#include "RendererInterface.h"
#include "IStereoLayers.h"
#include "XRRenderBridge.h"
#include "PXR_HMDSettings.h"
#if PLATFORM_WINDOWS
#include "Windows/WindowsHWrapper.h"
#endif
class FPICOXRHMD;
class FPICOXRRenderBridge : public FXRRenderBridge
{
public:
FPICOXRRenderBridge(FPICOXRHMD* HMD);
/** FRHICustomPresent */
virtual bool NeedsNativePresent() override;
virtual bool Present(int32& InOutSyncInterval)override;
FXRSwapChainPtr CreateSwapChain_RenderThread(uint32 ID, uint32 LayerID, ERHIResourceType ResourceType, TArray<uint64>& NativeTextures, uint8 Format, uint32 SizeX, uint32 SizeY, uint32 ArraySize, uint32 NumMips, uint32 NumSamples, ETextureCreateFlags Flags, ETextureCreateFlags TargetableTextureFlags, uint32 MSAAValue);
virtual FTextureRHIRef CreateTexture_RenderThread(ERHIResourceType ResourceType, uint64 InTexture, uint8 Format, uint32 SizeX, uint32 SizeY, uint32 NumMips, uint32 NumSamples, ETextureCreateFlags TargetableTextureFlags, uint32 MSAAValue) = 0;
virtual void GetGraphics() {}
virtual int GetSystemRecommendedMSAA() const;
void TransferImage_RenderThread(FRHICommandListImmediate& RHICmdList, FRHITexture* DstTexture, FRHITexture* SrcTexture, FIntRect DstRect = FIntRect(), FIntRect SrcRect = FIntRect(), bool bAlphaPremultiply = false, bool bNoAlphaWrite = false, bool bNeedGreenClear = false, bool bInvertY = false, bool sRGBSource = false, bool bInvertAlpha = false) const;
void SubmitGPUCommands_RenderThread(FRHICommandListImmediate& RHICmdList);
void ReleaseResources_RHIThread();
void Shutdown();
#ifdef PICO_CUSTOM_ENGINE
virtual void UpdateFoveationOffsetsUsage_RHIThread(bool bUseOffsets) {}
virtual void UpdateFoveationOffsets_RHIThread(const FIntPoint& LeftOffset, const FIntPoint& RightOffset) {}
#endif
FPICOXRHMD* PICOXRHMD;
FXRSwapChainPtr SwapChain;
FString RHIString;
IRendererModule* RendererModule;
};
FPICOXRRenderBridge* CreateRenderBridge_OpenGL(FPICOXRHMD* HMD);
FPICOXRRenderBridge* CreateRenderBridge_Vulkan(FPICOXRHMD* HMD);