52 lines
2.0 KiB
C++
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 */
|