没有构造C ++映射

时间:2016-02-29 20:28:01

标签: c++ dictionary

我有一个结构如下;

struct LIBRARY_EXPORT gpuprogram_t {
public:
    GLuint gpuprogram_handle;
    gpuprogram_t();
    ~gpuprogram_t();
    void attach_shader(GLuint shader_handle, GLuint shader_type);
    void link_program();
    void use_program();
    void add_attribute(const std::string& attribute);
    void add_uniform(const std::string& uniform);

    GLuint operator[](const std::string& attribute);
    GLuint operator()(const std::string& uniform);
private:
    std::map<GLuint, GLuint> shaders;
    std::map<std::string, GLuint> attribute_list;
    std::map<std::string, GLuint> uniform_list;
};

我用它来管理一些OpenGL。我在.cpp文件中实现了这些东西。在我的attach_shader实现中有一部分;

if (shaders.find(shader_type) == shaders.end()) {
    // No shader of this type is attached before
    shaders.insert(std::pair<GLuint, GLuint>(shader_type, shader_handle));
    ...
}

我的构造函数也是这样;

gpuprogram_t::gpuprogram_t() {
    gpuprogram_handle = glCreateProgram();
}

如果您想自己构建MCVE,可以将其中的其他部分留空并使用它;

gpuprogram_t gp;
gp.attach_shader(shader_handle, shader_type)

在这里你不必拥有OpenGL的GLuints,你可以将它们改为普通的int。 这部分每次都给我分段故障。我不知道地图着色器有什么问题。我没有在构造函数中初始化它。我将它保存在头文件中,以便使用默认构造函数初始化它。然后我将通过attach_shader填写它。稍后当程序对象超出范围时,将删除所有对象。但显然我做错了什么。着色器映射可能总是垃圾,每次都会导致分段错误。我做错了什么?

0 个答案:

没有答案