Various fixes

This commit is contained in:
Ilya Laktyushin 2022-12-25 21:16:27 +04:00
parent c98abdd025
commit 4afc8c1af3
5 changed files with 56 additions and 89 deletions

View File

@ -59,9 +59,15 @@ final class DrawingMetalView: MTKView {
override var isHidden: Bool { override var isHidden: Bool {
didSet { didSet {
if self.isHidden {
Queue.mainQueue().after(0.2) {
self.isPaused = true
}
} else {
self.isPaused = self.isHidden self.isPaused = self.isHidden
} }
} }
}
required init(coder: NSCoder) { required init(coder: NSCoder) {
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
@ -138,7 +144,6 @@ final class DrawingMetalView: MTKView {
} }
} }
override var frame: CGRect { override var frame: CGRect {
get { get {
return super.frame return super.frame
@ -157,7 +162,7 @@ final class DrawingMetalView: MTKView {
let renderPassDescriptor = MTLRenderPassDescriptor() let renderPassDescriptor = MTLRenderPassDescriptor()
let attachment = renderPassDescriptor.colorAttachments[0] let attachment = renderPassDescriptor.colorAttachments[0]
attachment?.clearColor = clearColor attachment?.clearColor = self.clearColor
attachment?.texture = self.currentDrawable?.texture attachment?.texture = self.currentDrawable?.texture
attachment?.loadAction = .clear attachment?.loadAction = .clear
attachment?.storeAction = .store attachment?.storeAction = .store
@ -185,7 +190,7 @@ final class DrawingMetalView: MTKView {
func reset() { func reset() {
let renderPassDescriptor = MTLRenderPassDescriptor() let renderPassDescriptor = MTLRenderPassDescriptor()
let attachment = renderPassDescriptor.colorAttachments[0] let attachment = renderPassDescriptor.colorAttachments[0]
attachment?.clearColor = clearColor attachment?.clearColor = self.clearColor
attachment?.texture = self.currentDrawable?.texture attachment?.texture = self.currentDrawable?.texture
attachment?.loadAction = .clear attachment?.loadAction = .clear
attachment?.storeAction = .store attachment?.storeAction = .store
@ -250,6 +255,15 @@ private class Drawable {
func clear() { func clear() {
self.texture?.clear() self.texture?.clear()
}
func reset() {
self.prepareForDraw()
if let commandEncoder = self.makeCommandEncoder() {
commandEncoder.endEncoding()
}
self.commit(wait: true) self.commit(wait: true)
} }
@ -273,6 +287,7 @@ private class Drawable {
return commandBuffer.makeRenderCommandEncoder(descriptor: renderPassDescriptor) return commandBuffer.makeRenderCommandEncoder(descriptor: renderPassDescriptor)
} }
internal func commit(wait: Bool = false) { internal func commit(wait: Bool = false) {
self.commandBuffer?.commit() self.commandBuffer?.commit()
if wait { if wait {
@ -633,40 +648,6 @@ final class Texture {
self.height = height self.height = height
self.bytesPerRow = bytesPerRow self.bytesPerRow = bytesPerRow
// if #available(iOS 12.0, *) {
//#if targetEnvironment(simulator)
// self.buffer = nil
// let textureDescriptor = MTLTextureDescriptor()
// textureDescriptor.textureType = .type2D
// textureDescriptor.pixelFormat = .bgra8Unorm
// textureDescriptor.width = width
// textureDescriptor.height = height
// textureDescriptor.usage = [.renderTarget, .shaderRead]
// textureDescriptor.storageMode = .shared
//
// guard let texture = device.makeTexture(descriptor: textureDescriptor) else {
// return nil
// }
//#else
// guard let buffer = device.makeBuffer(length: bytesPerRow * height, options: MTLResourceOptions.storageModeShared) else {
// return nil
// }
// self.buffer = buffer
//
// let textureDescriptor = MTLTextureDescriptor()
// textureDescriptor.textureType = .type2D
// textureDescriptor.pixelFormat = .bgra8Unorm
// textureDescriptor.width = width
// textureDescriptor.height = height
// textureDescriptor.usage = [.renderTarget, .shaderRead]
// textureDescriptor.storageMode = buffer.storageMode
//
// guard let texture = buffer.makeTexture(descriptor: textureDescriptor, offset: 0, bytesPerRow: bytesPerRow) else {
// return nil
// }
//#endif
// self.texture = texture
// } else {
self.buffer = nil self.buffer = nil
let textureDescriptor = MTLTextureDescriptor() let textureDescriptor = MTLTextureDescriptor()
@ -682,7 +663,7 @@ final class Texture {
} }
self.texture = texture self.texture = texture
// }
self.clear() self.clear()
} }
@ -699,26 +680,7 @@ final class Texture {
func createCGImage() -> CGImage? { func createCGImage() -> CGImage? {
let dataProvider: CGDataProvider let dataProvider: CGDataProvider
// if #available(iOS 12.0, *) {
//#if targetEnvironment(simulator)
// guard let data = NSMutableData(capacity: self.bytesPerRow * self.height) else {
// return nil
// }
// data.length = self.bytesPerRow * self.height
// self.texture.getBytes(data.mutableBytes, bytesPerRow: self.bytesPerRow, bytesPerImage: self.bytesPerRow * self.height, from: MTLRegion(origin: MTLOrigin(), size: MTLSize(width: self.width, height: self.height, depth: 1)), mipmapLevel: 0, slice: 0)
//
// guard let provider = CGDataProvider(data: data as CFData) else {
// return nil
// }
// dataProvider = provider
//#else
// guard let buffer = self.buffer, let provider = CGDataProvider(data: Data(bytesNoCopy: buffer.contents(), count: buffer.length, deallocator: .custom { _, _ in
// }) as CFData) else {
// return nil
// }
// dataProvider = provider
//#endif
// } else {
guard let data = NSMutableData(capacity: self.bytesPerRow * self.height) else { guard let data = NSMutableData(capacity: self.bytesPerRow * self.height) else {
return nil return nil
} }
@ -729,7 +691,6 @@ final class Texture {
return nil return nil
} }
dataProvider = provider dataProvider = provider
// }
guard let image = CGImage( guard let image = CGImage(
width: Int(self.width), width: Int(self.width),

View File

@ -241,11 +241,11 @@
if (animated) { if (animated) {
[UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{ [UIView animateWithDuration:0.2 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
_inputPanelView.frame = CGRectMake(edgeInsets.left, y, frame.size.width, panelHeight); _inputPanelView.frame = CGRectMake(edgeInsets.left, y, frame.size.width, panelHeight);
_backgroundView.frame = CGRectMake(edgeInsets.left, y, frame.size.width, backgroundHeight + 1.0); _backgroundView.frame = CGRectMake(edgeInsets.left, y, frame.size.width, backgroundHeight);
} completion:nil]; } completion:nil];
} else { } else {
_inputPanelView.frame = CGRectMake(edgeInsets.left, y, frame.size.width, panelHeight); _inputPanelView.frame = CGRectMake(edgeInsets.left, y, frame.size.width, panelHeight);
_backgroundView.frame = CGRectMake(edgeInsets.left, y, frame.size.width, backgroundHeight + 1.0); _backgroundView.frame = CGRectMake(edgeInsets.left, y, frame.size.width, backgroundHeight);
} }
} }

View File

@ -81,6 +81,11 @@ const CGSize TGPhotoPaintingMaxSize = { 1920.0f, 1920.0f };
_context = context; _context = context;
_stickersContext = stickersContext; _stickersContext = stickersContext;
if (entitiesView != nil) {
_skipEntitiesSetup = true;
entitiesView.userInteractionEnabled = true;
}
CGSize size = TGScaleToSize(photoEditor.originalSize, [TGPhotoDrawingController maximumPaintingSize]); CGSize size = TGScaleToSize(photoEditor.originalSize, [TGPhotoDrawingController maximumPaintingSize]);
_drawingAdapter = [_stickersContext drawingAdapter:size originalSize:photoEditor.originalSize isVideo:photoEditor.forVideo isAvatar:isAvatar entitiesView:entitiesView]; _drawingAdapter = [_stickersContext drawingAdapter:size originalSize:photoEditor.originalSize isVideo:photoEditor.forVideo isAvatar:isAvatar entitiesView:entitiesView];
_interfaceController = (UIViewController<TGPhotoDrawingInterfaceController> *)_drawingAdapter.interfaceController; _interfaceController = (UIViewController<TGPhotoDrawingInterfaceController> *)_drawingAdapter.interfaceController;

View File

@ -336,7 +336,8 @@
_fullPaintingView = [[UIImageView alloc] init]; _fullPaintingView = [[UIImageView alloc] init];
_fullPaintingView.frame = _fullPreviewView.frame; _fullPaintingView.frame = _fullPreviewView.frame;
_fullEntitiesView = [_stickersContext drawingEntitiesViewWithSize:_photoEditor.originalSize]; CGSize size = TGScaleToSize(_photoEditor.originalSize, [TGPhotoDrawingController maximumPaintingSize]);
_fullEntitiesView = [_stickersContext drawingEntitiesViewWithSize:size];
_fullEntitiesView.userInteractionEnabled = false; _fullEntitiesView.userInteractionEnabled = false;
CGRect rect = [TGPhotoDrawingController fittedCropRect:_photoEditor.cropRect originalSize:_photoEditor.originalSize keepOriginalSize:true]; CGRect rect = [TGPhotoDrawingController fittedCropRect:_photoEditor.cropRect originalSize:_photoEditor.originalSize keepOriginalSize:true];
_fullEntitiesView.frame = CGRectMake(0, 0, rect.size.width, rect.size.height); _fullEntitiesView.frame = CGRectMake(0, 0, rect.size.width, rect.size.height);