work on basic VR

This commit is contained in:
2026-05-30 20:43:02 +03:00
parent 4811ad0820
commit 3b128315e7
18 changed files with 716 additions and 29 deletions

View File

@@ -3,12 +3,47 @@
#include "tier1/interface.h"
#include "tier2/iappsystem.h"
#include "materialsystem/imaterialsystem.h"
#include "trig.h"
abstract_class IXrManager: public IAppSystem
struct XRRenderSurface_t
{
uint32_t m_uWidth;
uint32_t m_uHeight;
Vector m_vPosition;
Quat m_vRotation;
float m_fFov;
};
abstract_class IXRHeadset
{
public:
virtual uint32_t GetSurfaceCount() = 0;
virtual XRRenderSurface_t GetSurface( uint32_t i ) = 0;
virtual void SetSurfaceImage( uint32_t i, IImage *pImage ) = 0;
};
abstract_class IXRController
{
public:
};
abstract_class IXRManager: public IAppSystem2
{
public:
virtual void Frame() = 0;
virtual void PreRender() = 0;
virtual void PostRender() = 0;
virtual void CopySwapchain() = 0;
virtual uint32_t GetHeadsetCount() = 0;
virtual IXRHeadset *GetHeadset( uint32_t i ) = 0;
};
#define XR_INTERFACE_VERSION "XR001"
#define OPEN_XR_INTERFACE_VERSION "Open" XR_INTERFACE_VERSION
#endif

View File

@@ -30,6 +30,7 @@ enum EImageFormat
IMAGE_FORMAT_RGBA8_UINT,
IMAGE_FORMAT_RGBA8_SINT,
IMAGE_FORMAT_RGBA8_SRGB,
IMAGE_FORMAT_RGBA16_UINT,
IMAGE_FORMAT_RGBA16_SINT,
@@ -260,6 +261,14 @@ public:
virtual void PSSetSampler( uint32_t uRegister, ISampler *pImage ) = 0;
};
struct ImageSector_t
{
int32_t m_iX;
int32_t m_iY;
int32_t m_iWidth;
int32_t m_iHeight;
};
abstract_class IRenderCommandList
{
public:
@@ -289,6 +298,11 @@ public:
virtual void EndRecording() = 0;
virtual void Barrier( IRenderingObject *pObject, bool bIsRead, bool bIsWrite ) = 0;
virtual void CopyImageToImage( IImage *pSrc, IImage *pDst ) = 0;
virtual void BlitImageToImage( IImage *pSrc, ImageSector_t src, IImage *pDst, ImageSector_t dst ) = 0;
virtual void ClearImage( IImage *pImage, float fR, float fG, float fB, float fA ) = 0;
virtual void ClearDepth( IImage *pImage, float fVal ) = 0;
};
//-----------------------------------------------------------------------------
@@ -296,7 +310,7 @@ public:
//
// Responsible for the object handling
//-----------------------------------------------------------------------------
abstract_class IRenderContext: public IAppSystem
abstract_class IRenderContext: public IAppSystem2
{
public:
virtual void Frame( float fTime ) = 0;
@@ -324,8 +338,6 @@ public:
virtual void DestroyCommandList( IRenderCommandList *pCommandList ) = 0;
virtual void SubmitCommandList(IRenderCommandList *pList) = 0;
virtual void SetMainWindowManager( IGameWindowManager *pWindowManager ) = 0;
virtual void RenderGameWindow( IGameWindow *pWindow ) = 0;
virtual void RegisterGameWindow( IGameWindow *pWindow ) = 0;
virtual void UnregisterGameWindow( IGameWindow *pWindow ) = 0;
@@ -334,6 +346,11 @@ public:
virtual void DestroyTextureArray() = 0;
virtual ISampler *GetDefaultSampler() = 0;
virtual void *GetVulkanInstance() = 0;
virtual void *GetVulkanPhysicalDevice() = 0;
virtual void *GetVulkanDevice() = 0;
virtual IImage *CreateImageFromVkImage( void *pVkImage, uint32_t x, uint32_t y, uint64_t optimalLayout, EImageFormat eFormat, EMultisampleType eMultisampleType ) = 0;
};
#define RENDER_CONTEXT_INTERFACE_VERSION "RenderContext001"