glDeleteTextures导致段错误

时间:2014-11-20 22:45:29

标签: c++ opengl

我有这个C ++控制台应用程序,它创建一个窗口并初始化一个OpenGL上下文。 IDE:CodeBocks Compilator:MinGW(x32) 操作系统:Windows 8.1 64位

因此,当我编译时,我有一个控制台和带有上下文的窗口。当我先关闭窗口然后关闭控制台时,一切都还可以。 但是,如果我先关闭控制台,我会从虚拟析构函数中的glDeleteTextures中获得分段错误。

以下是我初始化纹理的方法:

texture::texture(const string& fileName)
{
    int width, height, numComponents;
    unsigned char* imageData = stbi_load(fileName.c_str(), &width, &height, &numComponents, 4);

    if(imageData == NULL)
        cout << "Could not open " << fileName << "." << endl;

    glGenTextures(1, &m_texture);
    glBindTexture(GL_TEXTURE_2D, m_texture);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);

    glBindTexture(GL_TEXTURE, 0);
    stbi_image_free(imageData);
}

void texture::useTexture(unsigned int textureUnit)
{
    if(textureUnit < 0 || textureUnit > 32)
    {
        cout << "Texture unit not between 0 and 32. Setting it to 0..." << endl;
        textureUnit = 0;
    }

    glActiveTexture(GL_TEXTURE0 + textureUnit);
    glBindTexture(GL_TEXTURE_2D, m_texture);
}

texture::~texture()
{
    glDeleteTextures(1, &m_texture);
}

请记住,我编写了相同的代码,但使用64位mingw编译并使用64位glfw,它工作得很好......如果这有任何帮助。

0 个答案:

没有答案