#pragma once

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

////////////////////////////////////////////////////////////////////////////////////
//	Render System Interface

#include "ICoreSystem.h"
#include <cstdint>

typedef struct VkImageView_T *VkImageView;

namespace ApplicationFramework {

class Window;
class Image;
using TextureId = void*; //uint32_t;

class IRenderSystem : public ICoreSystem
{
public:
    virtual void CreateWindow(Window* window) = 0;
    virtual void DestroyWindow(Window* window) = 0;

    //virtual void CreateTexture(Texture* texture) = 0;
    //virtual void DestroyTexture(Texture* texture) = 0;
    virtual TextureId LoadTexture(VkImageView imageView, int w, int h) = 0;

    virtual TextureId CreateTexture(Image& image) = 0;
    virtual void DestroyTexture(TextureId texture) = 0;
};

} // ApplicationFramework namespace
