我开始为一个独立项目创建一个小型游戏引擎。在编写引擎的图形部分时,我注意到当我停止使用 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();
}
}
}