SKEffectNode в сочетании с CIFilter не хватает памяти - PullRequest
0 голосов
/ 30 января 2019

Я попытался объединить 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, и с использованием памяти проблем нет.

...