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()
之前是一个好时机。或者,您只需要创建一次纹理,并且可以随时更新其数据,这也会使性能大大降低