#ifndef GAME_WINDOW_H #define GAME_WINDOW_H #include "tier2/iappsystem.h" #include "tier0/platform.h" #include "materialsystem/imaterialsystem.h" enum EGraphicsAPI { GRAPHICS_API_METAL, GRAPHICS_API_VULKAN, }; abstract_class IGameWindow: public IAppSystem { public: virtual void UpdateWindow() = 0; // Rendering info virtual void SetRenderImage( IImage *pImage ) = 0; virtual bool BIsRenderResolutionUpdated() = 0; virtual void GetRenderWidth() = 0; virtual void GetRenderHeight() = 0; virtual EGraphicsAPI GetGraphicsAPI() = 0; // Vulkan stuff virtual int GetVulkanInstanceExtensionCount() = 0; virtual const char **GetVulkanInstanceExtensions() = 0; virtual void CreateVulkanSurface( void *pInstance, void *pDevice ) = 0; virtual void DestroyVulkanSurface( void *pInstance, void *pDevice ) = 0; virtual void *GetVulkanSurface() = 0; virtual void *GetVulkanFence( int iFrame ) = 0; virtual void *GetVulkanDrawSemaphore( int iFrame ) = 0; virtual void *GetVulkanPresentSemaphore( int iFrame ) = 0; virtual IImage *GetVulkanSwapchainImage( int iFrame ) = 0; }; extern IGameWindow *gamewindow; #endif