#pragma once

/*
	VulkanFramework
	by John Ryland
	Copyright (c) 2023
*/

////////////////////////////////////////////////////////////////////////////////////
//	Vulkan Surface

#include "VulkanDevice.h"

struct GLFWwindow;

namespace Vulkan {

class Surface
{
public:
    Surface(Device& device, GLFWwindow* window);
    virtual ~Surface();

    Device&               m_owner;
    VkSurfaceKHR          m_surface;
    VkSurfaceFormatKHR    m_format;
    VkPresentModeKHR      m_presentMode;

protected:
    virtual void Create(GLFWwindow* window);
    virtual void Destroy();
    virtual VkSurfaceFormatKHR SelectFormat();
    virtual VkPresentModeKHR SelectPresentMode();  // TODO : probably belongs elsewhere
};

} // Vulkan namespace
