Files
HydraV3/HydraEngine/source/buffer/HydraTextureBufferManager.h
2026-08-04 17:39:07 +01:00

52 lines
2.0 KiB
C++

#ifndef HYDRATEXTUREBUFFERMANAGER
#define HYDRATEXTUREBUFFERMANAGER
#include "../engine/HydraObject.h"
#include "HydraTexureBuffer.h"
#include <vector>
#include <queue>
#include <unordered_map>
#include <GLMIncludes.h>
#include <stb_image.h>
#include <mutex>
#include <string>
#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<HydraID> m_available_texture_ids;
std::vector<HydraTextureBuffer> m_textures;
std::vector<uint64_t> m_bindless_texture_ids;
std::unordered_map<std::string, HydraID> m_texture_lookup;
uint32_t m_gl_texture_id = 0;
};
#endif /* HYDRATEXTUREBUFFERMANAGER */