Я попытался объединить SKEffectNode с CIFilter и дочерним SKSpriteNode, и хотя он, кажется, работает в течение нескольких мгновений, в результате все память устройства используется, а iPad Retina (A7 GPU) просто перезагружается.Я также иногда вижу «Сообщение от отладчика: прекращено из-за проблемы с памятью», напечатанное в журнале отладчика.Полный источник находится на github в SKEffectNodeFiltered .
Я создаю фильтр следующим образом:
// Pixelate CoreImage filter
CIFilter *pixellateFilter = [CIFilter filterWithName:@"CIPixellate"];
[pixellateFilter setDefaults]; // Remember to setDefaults...
[pixellateFilter setValue:@(25.0) forKey:@"inputScale"];
SKEffectNode *effectNode = [[SKEffectNode alloc] init];
effectNode.shouldEnableEffects = TRUE; // enable CoreImage filtering
effectNode.shouldRasterize = FALSE; // generate and then discard tmp framebuffer
effectNode.shouldCenterFilter = TRUE;
effectNode.filter = pixellateFilter;
self.effectNode = effectNode;
[effectNode addChild:background];
[self addChild:effectNode];
effectNode.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
Я посмотрел на инструмент выделения, я вижу тройнойбуферизованный набор объектов CoreSurface, но нет очевидной утечки памяти.Объем используемой памяти довольно большой - всего около 140 мегабайт, это большое, но это тестирование использования очень большого входного изображения с разрешением 4096x4096, которое является максимальным размером текстуры.Что здесь происходит?Если я не использовал фильтр, то производительность составляет 60 FPS, и с использованием памяти проблем нет.