目录

GL_Buffer API Not Paired

使用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)