#ifndef HYDRATEXTUREBUFFERMANAGER #define HYDRATEXTUREBUFFERMANAGER #include "../engine/HydraObject.h" #include "HydraTexureBuffer.h" #include #include #include #include #include #include #include #include "../GlewIncludes.h" class HydraTextureBufferManager : public HydraObject { public: void Intialise(); void Shutdown(); HydraID CreateTexture(std::string texture_name, uint32_t width, uint32_t height, uint32_t internal_format, uint32_t min_filter, uint32_t mag_filter, uint32_t format = GL_RGBA, uint32_t data_type = GL_UNSIGNED_BYTE, uint32_t mip_levels = 0, void* data = nullptr); HydraID CreateTextureArray(std::string texture_name, uint32_t width, uint32_t height, uint32_t internal_format, uint32_t min_filter, uint32_t mag_filter, uint32_t levels); void BindTexture(HydraID texture_id, uint32_t target); void UnbindTexture(HydraID texture_id); void DeleteTexture(HydraID texture_id); HydraID LoadTexture(std::string texture_filename); HydraID FindTexture(std::string texture_name); void* GetTextureBuffer(); const HydraTextureBuffer& GetTexture(HydraID texture_id); private: HydraID _GetTextureID(); std::mutex m_mutex; std::queue m_available_texture_ids; std::vector m_textures; std::vector m_bindless_texture_ids; std::unordered_map m_texture_lookup; uint32_t m_gl_texture_id = 0; }; #endif /* HYDRATEXTUREBUFFERMANAGER */