Files
noggit-red/src/noggit/rendering/LiquidTextureManager.hpp

46 lines
1.4 KiB
C++

// This file is part of Noggit3, licensed under GNU General Public License (version 3).
#ifndef NOGGIT_LIQUIDTEXTUREMANAGER_HPP
#define NOGGIT_LIQUIDTEXTUREMANAGER_HPP
#include "noggit/TextureManager.h"
#include "noggit/ContextObject.hpp"
#include "external/tsl/robin_map.h"
#include <tuple>
#include "external/glm/vec2.hpp"
template<typename ... Args>
std::string string_format(const std::string& format, Args ... args)
{
int size_s = std::snprintf(nullptr, 0, format.c_str(), args ...) + 1; // Extra space for '\0'
if (size_s <= 0) { throw std::runtime_error("Error during formatting."); }
auto size = static_cast<size_t>(size_s);
auto buf = std::make_unique<char[]>(size);
std::snprintf(buf.get(), size, format.c_str(), args ...);
return std::string(buf.get(), buf.get() + size - 1); // We don't want the '\0' inside
}
class LiquidTextureManager
{
public:
explicit LiquidTextureManager(Noggit::NoggitRenderContext context);
LiquidTextureManager() = delete;
void upload();
void unload();
tsl::robin_map<unsigned, std::tuple<GLuint, glm::vec2, int, unsigned>> const& getTextureFrames() { return _texture_frames_map; };
private:
bool _uploaded = false;
// liquidTypeRecID : (array, (animation_x, animation_y), liquid_type)
tsl::robin_map<unsigned, std::tuple<GLuint, glm::vec2, int, unsigned>> _texture_frames_map;
Noggit::NoggitRenderContext _context;
};
#endif //NOGGIT_LIQUIDTEXTUREMANAGER_HPP