微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解决SpriteKit SKTexture的CGImage“上下文泄漏”?

如何解决如何解决SpriteKit SKTexture的CGImage“上下文泄漏”?

Xcode 11-12,MacOS Catalina,Swift 5项目...

产生此代码“检测到上下文泄漏,msgtracer返回-1”错误

import Foundation
import SpriteKit
import GameKit

func getTextureImage(_ index: Int,isSky: Bool = true) -> CGImage {
    
    let perlinSource = GKPerlinNoiseSource(
        frequency: 1,octaveCount: 7,persistence: 0.5,lacunarity: 2.0,seed: 123
    )
    
    let noise = GKNoise(perlinSource)
    
    noise.gradientColors = [
        -1.0: NSColor(red: 0.0,green: 0.15,blue: 0.85,alpha: 1.0),1.0 : NSColor(red: 1,green: 1,blue: 1,]
    
    noise.move(by: vector_double3(Double(index),0))
    
    let noiseMap = GKNoiseMap(noise,size: SIMD2(repeating: 1),origin: SIMD2(repeating: 0.0),sampleCount: SIMD2(repeating: 16),seamless: false)
    
    let t = SKTexture(noiseMap: noiseMap)
    let i = t.cgImage()
    
    return i
}


for x in 0...128 {
    
    let texture = getTextureImage(x)
    
}

如何通过.cgImage()方法调用解决错误? 我需要来自彩色 GKNoiseMap 的CGImage数据,然后将其与MetalKit一起使用,以通过

将数据加载到 MTLTexture
MTKTextureLoader.newTexture(cgImage: texture,options: textureLoaderOptions)

解决方法

是的,我当然尝试过

autoreleasepool {
    let t = getTextureImage(x)
}

并解决了问题:)因此,您必须在Swift API中将autoreleasepool与NSImage和CGImage一起使用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。