我正在尝试使用c ++为我的2D游戏制作一个“资源管理器”。 最初的想法是这样的:
class resource_manager
{
private:
static std::unordered_map<std::string, std::shared_ptr<texture> > all_textures;
public:
static std::shared_ptr<texture> texture_load(std::string path)
{
// if path no exist in map all_textures:
// load texture, store in map, return the pointer.
// else: only return the pointer.
}
protected
resource_manager() {}
~resource_manager() {}
};
class texture
{
private:
unsigned id; // opengl texture id
unsigned width;
unsigned height;
public:
texture(unsigned _id, unsigned _width, unsigned _height)
: id(_id), width(_width), height(_height) {}
~texture() {}
// getters and setters
};
但是,我有一个问题。当shared_ptr计数器来到&lt; 0,纹理的指针将被破坏,好吧,但我的纹理仍然在VGA内存中继续。因此,当指针破坏自己时,我需要调用glDeleteTextures()
来卸载内存中的纹理。
C ++不是我的专长,因为我很难做到这一点。 抱歉我的英语不好。欢迎任何帮助。