#pragma once #include "core/memory.h" #include #include namespace Donut { class Texture { public: virtual ~Texture() = default; virtual uint32_t get_width() const = 0; virtual uint32_t get_height() const = 0; virtual uint32_t get_renderer_id() const = 0; virtual void set_data(void* data, uint32_t size) = 0; virtual void bind(uint32_t slot = 0) const = 0; virtual void bind_as_image(uint32_t slot = 0, bool read_only = false) const = 0; virtual bool operator==(const Texture& other) const = 0; }; class Texture2D : public Texture { public: static Ref create(uint32_t width, uint32_t height); static Ref create(const std::string& path); }; };