#pragma once

/*
	GameEngine and Editor
	by John Ryland
	Copyright (c) 2023
*/

////////////////////////////////////////////////////////////////////////////////////
//	IRenderDevice

#include "Image.h"
#include "DeviceImage.h"
#include "Nk.h"

namespace GameEngine {

// TODO: remove NK dep from interface
class IRenderDevice
{
public:
    IRenderDevice() {}
    virtual ~IRenderDevice() {}

    // virtual void Create() = 0;
    // virtual void Destroy() = 0;

    virtual nk_draw_null_texture* NullTexture() = 0;

    virtual struct nk_image UploadTexture(Image& image, bool generateMips = true) = 0;
    //virtual DeviceImage UploadTexture(Image& image, bool generateMips = true) = 0;

    virtual void Prepare(int width, int height) = 0;
    virtual void Draw(nk_context *ctx, int width, int height, struct nk_vec2 scale) = 0;
    virtual void Present() = 0;
};

} // GameEngine namespace
