mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Don't reuse drawing context
This commit is contained in:
parent
2ad4228493
commit
9761eb5a57
@ -422,6 +422,9 @@ public class DrawingContext {
|
||||
public let length: Int
|
||||
private let imageBuffer: ASCGImageBuffer
|
||||
public var bytes: UnsafeMutableRawPointer {
|
||||
if self.hasGeneratedImage {
|
||||
preconditionFailure()
|
||||
}
|
||||
return self.imageBuffer.mutableBytes
|
||||
}
|
||||
private let context: CGContext
|
||||
@ -491,9 +494,7 @@ public class DrawingContext {
|
||||
return nil
|
||||
}
|
||||
if self.hasGeneratedImage {
|
||||
#if DEBUG
|
||||
assert(false)
|
||||
#endif
|
||||
preconditionFailure()
|
||||
return nil
|
||||
}
|
||||
self.hasGeneratedImage = true
|
||||
|
@ -12,6 +12,8 @@ import SwiftSignalKit
|
||||
public final class ManagedAnimationState {
|
||||
public let item: ManagedAnimationItem
|
||||
private let instance: LottieInstance
|
||||
|
||||
private let displaySize: CGSize
|
||||
|
||||
let frameCount: Int
|
||||
let fps: Double
|
||||
@ -21,15 +23,11 @@ public final class ManagedAnimationState {
|
||||
|
||||
public var executedCallbacks = Set<Int>()
|
||||
|
||||
private let renderContext: DrawingContext
|
||||
|
||||
public init?(displaySize: CGSize, item: ManagedAnimationItem, current: ManagedAnimationState?) {
|
||||
let resolvedInstance: LottieInstance
|
||||
let renderContext: DrawingContext
|
||||
|
||||
if let current = current {
|
||||
resolvedInstance = current.instance
|
||||
renderContext = current.renderContext
|
||||
} else {
|
||||
guard let path = item.source.path else {
|
||||
return nil
|
||||
@ -44,20 +42,21 @@ public final class ManagedAnimationState {
|
||||
return nil
|
||||
}
|
||||
resolvedInstance = instance
|
||||
renderContext = DrawingContext(size: displaySize, scale: UIScreenScale, clear: true)
|
||||
}
|
||||
|
||||
|
||||
self.displaySize = displaySize
|
||||
self.item = item
|
||||
self.instance = resolvedInstance
|
||||
self.renderContext = renderContext
|
||||
|
||||
self.frameCount = Int(self.instance.frameCount)
|
||||
self.fps = Double(self.instance.frameRate)
|
||||
}
|
||||
|
||||
func draw() -> UIImage? {
|
||||
self.instance.renderFrame(with: Int32(self.frameIndex ?? 0), into: self.renderContext.bytes.assumingMemoryBound(to: UInt8.self), width: Int32(self.renderContext.size.width * self.renderContext.scale), height: Int32(self.renderContext.size.height * self.renderContext.scale), bytesPerRow: Int32(self.renderContext.bytesPerRow))
|
||||
return self.renderContext.generateImage()
|
||||
let renderContext = DrawingContext(size: self.displaySize, scale: UIScreenScale, clear: true)
|
||||
|
||||
self.instance.renderFrame(with: Int32(self.frameIndex ?? 0), into: renderContext.bytes.assumingMemoryBound(to: UInt8.self), width: Int32(renderContext.size.width * renderContext.scale), height: Int32(renderContext.size.height * renderContext.scale), bytesPerRow: Int32(renderContext.bytesPerRow))
|
||||
return renderContext.generateImage()
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user