使用glClearColor或glPushMatrix / glPopMatrix对时OpenGL内存泄漏?

时间:2011-12-02 08:30:56

标签: memory opengl memory-leaks glew

我开始为一个独立项目创建一个小型游戏引擎。在编写引擎的图形部分时,我注意到当我停止使用glClearColor和glPushMatrix / glPopMatrix对时,内存泄漏消失了。 从我研究过的情况来看,它似乎很常见,但我没有找到解释为什么会发生这种情况的答案。

奇怪的是,泄漏持续了一两分钟,然后停止(非常一致)。 使用任务管理器,当泄漏停止时显示11,012K。

附加说明:我没有使用GLUT,但是我使用GLEW_1.7来映射vbo。

任何可能导致这种情况的想法? 由于OpenGL在幕后做了一些奇怪的事情,这只是一个非问题吗?

这是我唯一称之为glClearColor,glPushMatrix和glPopMatrix的地方。

void GraphicsDevice::updateCameraAndClear(IWindow* window)
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(32, window->getAspectRatio(), 0.0, 100.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glClearColor(100.0f / 255, 149.0f / 255, 237.0f / 255, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glEnable(GL_CULL_FACE); // Enable Culling
    glCullFace(GL_BACK);
    glEnable(GL_NORMALIZE);
    glEnable(GL_POLYGON_SMOOTH);
}

void Engine::draw(void)
{
    GraphicsDevice::Instance()->updateCameraAndClear(_window);
    if ( !_states.empty() )
    {
        for(std::vector<IState*>::iterator i = _states.begin(); i != _states.end(); i++)
        {
            glPushMatrix();
            (*i)->draw(this);
            glPopMatrix();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

也许你错误地使用推/弹对,比需要多一次额外的时间。但最终会导致缓冲区溢出..

检查您的推/弹对并确保确实是对。泄密也可能在周围的代码中。

编辑: OpenGL会收到说明,但不会立即执行。 OpenGL有自己的计划。如果您glDeleteTextures无法保证纹理将被移除,直到glFinish / glFlush命令(或甚至在?之后)。也许在你的Draw代码中还有其他东西在OpenGL中保存在内存中。这与glPush / glPop对共同加入时给出了描述的效果。