Ios opengl中的内存增长

Ios opengl中的内存增长,ios,opengl-es,memory-leaks,paint,Ios,Opengl Es,Memory Leaks,Paint,我在我的绘画应用程序中有更改画笔的代码。一切都很好,但我发现,如果我多次调用该方法,内存不会释放,并且会不断增长。。。我找不到它在哪里 - (void)setBrush:(UIImage *)brush withColor:(UIColor *)color andOpacity:(CGFloat)opacity andSize:(CGFloat)size { CGImageRef brushImage; CGContextRef brushContext; GLubyte *brushData;

我在我的绘画应用程序中有更改画笔的代码。一切都很好,但我发现,如果我多次调用该方法,内存不会释放,并且会不断增长。。。我找不到它在哪里

- (void)setBrush:(UIImage *)brush withColor:(UIColor *)color andOpacity:(CGFloat)opacity andSize:(CGFloat)size {
CGImageRef brushImage;
CGContextRef brushContext;
GLubyte *brushData;
size_t width, height;
brushImage = brush.CGImage;
width = CGImageGetWidth(brushImage);
height = CGImageGetHeight(brushImage);
if(brushImage) {
    brushData = (GLubyte *) calloc(width * height * 4, sizeof(GLubyte));
    brushContext = CGBitmapContextCreate(brushData, width, height, 8, width * 4, CGImageGetColorSpace(brushImage), (CGBitmapInfo)kCGImageAlphaPremultipliedFirst);
    CGContextDrawImage(brushContext, CGRectMake(0.0, 0.0, (CGFloat)width, (CGFloat)height), brushImage);
    CGContextRelease(brushContext);
    glGenTextures(1, &brushTexture);
    glBindTexture(GL_TEXTURE_2D, brushTexture);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, brushData);
    free(brushData);
}
CGColorRef clr = [color CGColor];
const CGFloat *components = CGColorGetComponents(clr);
CGFloat red = components[0];
CGFloat green = components[1];
CGFloat blue = components[2];
glColor4f(red * opacity/3, green * opacity/3, blue * opacity/3, opacity/3);
glPointSize(width * size / 2);
}

它可能在哪里,如何更正?

您从未删除使用
glGenTextures()
创建的纹理,因此您只需分配越来越多的空间来保存所有纹理数据。

您从未删除使用
glGenTextures()创建的纹理,因此,您只需分配越来越多的空间来保存所有纹理数据。

您永远不会删除使用
glGenTextures()
创建的纹理,因此您只需分配越来越多的空间来保存所有纹理数据。

您永远不会删除使用
glGenTextures()创建的纹理。
,因此,您只需分配越来越多的空间来保存所有纹理数据。

好吧,您似乎在每次更改画笔时都使用
glGenTextures
生成纹理。这些纹理由
openGL
保存,使用完后必须使用
glDeleteTextures
方法释放

我建议您跟踪生成的纹理,并在希望使用该纹理时(无需再次生成)将绑定变量与
glBindTexture
一起使用。这个绑定变量只是告诉openGL纹理在内存中的位置


每次设置画笔时生成和删除纹理可能会影响性能,除非它不经常使用。

嗯,似乎每次更改画笔时都使用
glGenTextures
生成纹理。这些纹理由
openGL
保存,使用完后必须使用
glDeleteTextures
方法释放

我建议您跟踪生成的纹理,并在希望使用该纹理时(无需再次生成)将绑定变量与
glBindTexture
一起使用。这个绑定变量只是告诉openGL纹理在内存中的位置


每次设置画笔时生成和删除纹理可能会影响性能,除非它不经常使用。

嗯,似乎每次更改画笔时都使用
glGenTextures
生成纹理。这些纹理由
openGL
保存,使用完后必须使用
glDeleteTextures
方法释放

我建议您跟踪生成的纹理,并在希望使用该纹理时(无需再次生成)将绑定变量与
glBindTexture
一起使用。这个绑定变量只是告诉openGL纹理在内存中的位置


每次设置画笔时生成和删除纹理可能会影响性能,除非它不经常使用。

嗯,似乎每次更改画笔时都使用
glGenTextures
生成纹理。这些纹理由
openGL
保存,使用完后必须使用
glDeleteTextures
方法释放

我建议您跟踪生成的纹理,并在希望使用该纹理时(无需再次生成)将绑定变量与
glBindTexture
一起使用。这个绑定变量只是告诉openGL纹理在内存中的位置



每次设置画笔时生成和删除纹理可能会影响性能,除非不经常使用它。

是否尝试使用内存泄漏工具?它应该显示跟踪和有问题的行。顺便说一句,如果你的内存增长,并不一定意味着你有漏洞。是的,我写了一点不正确的标题。记忆在增长,但为什么?启用ARC您是否尝试使用内存泄漏工具?它应该显示跟踪和有问题的行。顺便说一句,如果你的内存增长,并不一定意味着你有漏洞。是的,我写了一点不正确的标题。记忆在增长,但为什么?启用ARC您是否尝试使用内存泄漏工具?它应该显示跟踪和有问题的行。顺便说一句,如果你的内存增长,并不一定意味着你有漏洞。是的,我写了一点不正确的标题。记忆在增长,但为什么?启用ARC您是否尝试使用内存泄漏工具?它应该显示跟踪和有问题的行。顺便说一句,如果你的内存增长,并不一定意味着你有漏洞。是的,我写了一点不正确的标题。记忆在增长,但为什么?ARC enabledh我如何做,在哪里?抱歉问了个愚蠢的问题,我是新手OpenGL@mopsicus您必须通过
glDeleteTexture()
将其删除,并且需要在不再需要该纹理的位置执行此操作。因此,在调用
glGenTextures()
之前是一个好时机。或者,您只需要创建一次纹理,并且可以随时更新其数据,这也会使性能稍微好一点。您还应该注意,
glDeleteTextures(…)
不会立即释放内存。仅当0个对纹理的引用保留时,才会发生此情况。通常
glDeleteTextures(…)
将解除纹理绑定,这足以消除引用并立即释放内存,但也有一些不太常见的情况(例如,纹理附加到FBO或绑定到另一个渲染上下文)在这种情况下,内存将不会被释放,除非您做一些额外的工作来清除引用。这通常不是一个大问题,但在跟踪使用过的视频内存时,有时会令人头痛。我该如何做,在哪里?抱歉问了个愚蠢的问题,我是新手OpenGL@mopsicus您必须通过
glDeleteTexture()
将其删除,并且需要在不再需要该纹理的位置执行此操作。因此,在调用
glGenTextures()
之前是一个好时机。或者,您只需要创建一次纹理,并且可以随时更新其数据,这也会使性能大大降低