//
// Created by sfd on 25-4-25.
//

#ifndef TEXTURE_H
#define TEXTURE_H
#include <string>

#include <Hazel\Core/Core.h>


namespace Hazel
{
    class HAZEL_API Texture
    {
    public:
        virtual ~Texture() = default;
        virtual const uint32_t GetWidth() const = 0;
        virtual const uint32_t GetHeight() const = 0;
        virtual const uint32_t GetRendererID() const = 0;

        virtual void Bind(uint32_t slot = 0) const = 0;

        virtual void SetData(void* data, uint32_t size) = 0;

        virtual bool operator==(const Texture& other) const = 0;

    };


    class HAZEL_API Texture2D : public Texture
    {
        public:
        virtual ~Texture2D() = default;

        static Ref<Texture2D> Create(uint32_t width, uint32_t height);
        static Ref<Texture2D> Create(const std::string& path);

    };

}


#endif //TEXTURE_H
