使用glGenBuffers()生成的OpenGL缓冲区,使用完毕后,需及时调用glDeleteBuffers()进行删除,避免GPU内存无法回收,造成内存泄漏。
// rules.json
{
"rules": {
"cpp": {
"ResourceLeak": [
{
"ruleId": "GL_Buffer API Not Paired",
"severity": "error",
"skip": false
}
]
}
}
} // 正例代码
#include <GLES3/gl3.h>
void CreateGLBufferWithDelete()
{
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, 1024, nullptr, GL_DYNAMIC_DRAW);
// 使用 buffer...
// 正确删除 GL 缓冲区
glDeleteBuffers(1, &buffer);
} // 反例代码
#include <GLES3/gl3.h>
void CreateGLBufferWithoutDelete()
{
GLuint buffer;
// 生成缓冲区但未删除 - GPU 内存泄漏!
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, 1024, nullptr, GL_DYNAMIC_DRAW);
// 使用 buffer...
// 未删除 - GPU 内存泄漏!
} Code Scanner代码检查规则的配置指导请参考1.6.3 代码检查工具(codescanner)