Plasma Engine  2.0
Loading...
Searching...
No Matches
XRWindow.h
1#pragma once
2
3#include <Core/ActorSystem/ActorPluginWindow.h>
4#include <Core/ResourceManager/ResourceHandle.h>
5#include <Foundation/Reflection/Reflection.h>
6#include <GameEngine/GameApplication/WindowOutputTarget.h>
7#include <RendererCore/Shader/ConstantBufferStorage.h>
8#include <RendererCore/Shader/ShaderResource.h>
9
10class plXRInterface;
11
13class PL_GAMEENGINE_DLL plWindowXR : public plWindowBase
14{
15public:
16 plWindowXR(plXRInterface* pVrInterface, plUniquePtr<plWindowBase> pCompanionWindow);
17 virtual ~plWindowXR();
18
19 virtual plSizeU32 GetClientAreaSize() const override;
20
21 virtual plWindowHandle GetNativeWindowHandle() const override;
22
23 virtual bool IsVisible() const override { return true; }
24 virtual bool IsFullscreenWindow(bool bOnlyProperFullscreenMode) const override;
25
26 virtual void ProcessWindowMessages() override;
27
28 virtual void AddReference() override { m_iReferenceCount.Increment(); }
29 virtual void RemoveReference() override { m_iReferenceCount.Decrement(); }
30
32 const plWindowBase* GetCompanionWindow() const;
33
34private:
35 plXRInterface* m_pVrInterface = nullptr;
36 plUniquePtr<plWindowBase> m_pCompanionWindow;
37 plAtomicInteger32 m_iReferenceCount = 0;
38};
39
41class PL_GAMEENGINE_DLL plWindowOutputTargetXR : public plWindowOutputTargetBase
42{
43public:
44 plWindowOutputTargetXR(plXRInterface* pVrInterface, plUniquePtr<plWindowOutputTargetGAL> pCompanionWindowOutputTarget);
46
47 virtual void AcquireImage() override {}
48 virtual void PresentImage(bool bEnableVSync) override;
49 void CompanionViewBeginFrame(bool bThrottleCompanionView = true);
50 void CompanionViewEndFrame();
51 virtual plResult CaptureImage(plImage& out_image) override;
52
54 const plWindowOutputTargetBase* GetCompanionWindowOutputTarget() const;
55
56private:
57 plXRInterface* m_pXrInterface = nullptr;
58 plTime m_LastPresent;
59 plUniquePtr<plWindowOutputTargetGAL> m_pCompanionWindowOutputTarget;
60 plConstantBufferStorageHandle m_hCompanionConstantBuffer;
61 plShaderResourceHandle m_hCompanionShader;
62 bool m_bRender = false;
63};
64
66class PL_GAMEENGINE_DLL plActorPluginWindowXR : public plActorPluginWindow
67{
68 PL_ADD_DYNAMIC_REFLECTION(plActorPluginWindowXR, plActorPluginWindow);
69
70public:
71 plActorPluginWindowXR(plXRInterface* pVrInterface, plUniquePtr<plWindowBase> pCompanionWindow, plUniquePtr<plWindowOutputTargetGAL> pCompanionWindowOutput);
73 void Initialize();
74
75 virtual plWindowBase* GetWindow() const override;
76 virtual plWindowOutputTargetBase* GetOutputTarget() const override;
77
78protected:
79 virtual void Update() override;
80
81private:
82 plXRInterface* m_pVrInterface = nullptr;
84 plUniquePtr<plWindowOutputTargetXR> m_pWindowOutputTarget;
85};
Definition ActorPluginWindow.h:13
XR actor plugin window base implementation. Optionally wraps a companion window and output target.
Definition XRWindow.h:67
Definition ConstantBufferStorage.h:54
A class containing image data and associated meta data.
Definition Image.h:103
A Unique ptr manages an object and destroys that object when it goes out of scope....
Definition UniquePtr.h:10
Base class of all window classes that have a client area and a native window handle.
Definition Window.h:134
virtual bool IsFullscreenWindow(bool bOnlyProperFullscreenMode=false) const =0
Whether the window is a fullscreen window or should be one - some platforms may enforce this via the ...
Base class for window output targets.
Definition WindowOutputTargetBase.h:16
XR Window output target base implementation. Optionally wraps a companion window output target.
Definition XRWindow.h:42
XR Window base implementation. Optionally wraps a companion window.
Definition XRWindow.h:14
virtual bool IsVisible() const override
Whether the window can potentially be seen by the user. Windows that are minimized or hidden are not ...
Definition XRWindow.h:23
XR singleton interface. Needs to be initialized to be used for VR or AR purposes.
Definition XRInterface.h:29
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12