#pragma once #include #include #include #include #include namespace frostbite2D { enum class TextureSampling { Linear, PixelArt }; class Texture : public RefObject { public: static Ptr loadFromFile(const std::string& path); static Ptr createFromMemory(const uint8* data, int width, int height, int channels); static Ptr createEmpty(int width, int height); ~Texture(); void bind(uint32_t slot = 0, bool preferPixelArtSampling = false); void unbind(); void setWrapMode(uint32_t wrapS, uint32_t wrapT); void setFilterMode(uint32_t minFilter, uint32_t magFilter); void setSampling(TextureSampling sampling); TextureSampling getSampling() const { return sampling_; } int getWidth() const { return width_; } int getHeight() const { return height_; } uint32_t getID() const { return textureID_; } const std::string& getPath() const { return path_; } private: Texture(int width, int height, uint32_t id); void applyFilter(uint32_t minFilter, uint32_t magFilter); void applySampling(bool preferPixelArtSampling); uint32_t textureID_ = 0; int width_ = 0; int height_ = 0; int channels_ = 0; std::string path_; TextureSampling sampling_ = TextureSampling::Linear; uint32_t appliedMinFilter_ = 0; uint32_t appliedMagFilter_ = 0; Texture() = default; Texture(const Texture&) = delete; Texture& operator=(const Texture&) = delete; }; }