#pragma once
#include "Core/Defines.h"

#include <memory>

namespace Engine
{
	class Texture2D
	{
	public:

		// returns a smartpoint to a texture depending on the renderer api currently being used by given path
		static std::unique_ptr<Texture2D> New(const char* path);

		// virtual destructor
		virtual ~Texture2D() = default;

		// returns the texture id on the pipeline
		virtual u32 GetRendererID() const = 0;

	public:

		// binds the texture to the graphics pipeline
		virtual void Bind(u32 slot = 0) const = 0;

	public:

		// returns if texture is equals to other
		virtual bool operator==(const Texture2D& other) const = 0;

	public:

		// returns the texture's width
		virtual u32 GetWidth() const = 0;

		// returns the texture's height
		virtual u32 GetHeight() const = 0;

	};
}