#pragma once
/*
ApplicationFramework
by John Ryland
Copyright (c) 2023
*/
////////////////////////////////////////////////////////////////////////////////////
// Glfw Vulkan Surface
#include "IWindowRenderSurfaceSystem.h"
#include <unordered_map>
class GLFWwindow;
namespace ApplicationFramework {
class Window;
class GlfwWindowSystem;
class VulkanRenderer;
class GlfwVulkanSurface : public IWindowRenderSurfaceSystem
{
public:
GlfwVulkanSurface(IWindowSystem* windowSystem, IRenderSystem* renderSystem);
~GlfwVulkanSurface() override;
void* CreateWindowSurface(IWindow* window) override;
void DestroyWindowSurface(IWindow* window, void* surface) override;
//int CreateVulkanWindowSurface(VkInstance instance, Window* win, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface) override;
void Initialize() override;
void Shutdown() override;
void Prepare() override;
void Update() override;
void Render() override;
void Present() override;
private:
GlfwWindowSystem* m_windowSystem;
VulkanRenderer* m_renderSystem;
};
} // ApplicationFramework namespace