如何为游戏创建资源管理器

时间:2015-02-24 17:21:59

标签: c++ smart-pointers

我正在尝试使用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 ++不是我的专长,因为我很难做到这一点。 抱歉我的英语不好。欢迎任何帮助。

0 个答案:

没有答案