SKEffectNode与CIFilter结合使用时内存不足

时间:2019-01-30 00:50:39

标签: ios sprite-kit metal core-image

我尝试将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 Meg,这很大,但这正在测试使用最大4096x4096(这是最大纹理大小)的非常大的输入图像。这里发生了什么?如果我不使用过滤器,则性能为60 FPS,并且内存使用没有问题。

0 个答案:

没有答案