When I use CAEmitterLayer on my screen, it does not affect performance no matter how many layers and particles I use. I always see CPU usage zero.
Is it possible to know how CAEmitterLayer affects performance or even measure this?
Post
Replies
Boosts
Views
Activity
In some cases when I use "builtInDualCamera" capture device I get white blank depth photo. In other cases it works fine.
So I guess there is a limitation.
I use this code to get depth image:
private func saveDepth(name: String, photo: AVCapturePhoto) throws -> URL {
guard var depthData = photo.depthData else {
throw CameraError.photo("No depth data")
}
print("DEBUG: depth data quality \(depthData.depthDataQuality)")
if let orientationValue = photo.metadata[kCGImagePropertyOrientation as String] as? UInt32 {
if let orientation = CGImagePropertyOrientation(rawValue: orientationValue) {
depthData = depthData.applyingExifOrientation(orientation)
}
}
let converted = depthData.converting(toDepthDataType: kCVPixelFormatType_DepthFloat32)
let image = CIImage(cvPixelBuffer: converted.depthDataMap)
guard let colorSpace = image.colorSpace else {
throw CameraError.photo("Can not get image color space")
}
guard let data = context.tiffRepresentation(
of: image,
format: .Lf,
colorSpace: colorSpace,
options: [:]
) else {
throw CameraError.photo("Can not create TIFF")
}
let url = Path.cachePath.appendingPathComponent(name + "_depth.tiff")
try data.write(to: url)
return url
}
Any information about maximum distance or some other limitations for dual camera?
For the AVCaptureDevice.DeviceType.builtInUltraWideCamera capture device, AVCaptureConnection property isCameraIntrinsicMatrixDeliverySupported returns false.
Is it possible to get intrinsic matrix for this camera?
I found following code for ASTC encoding:
NSMutableData *data = [NSMutableData data];
CGImageDestinationRef destination = CGImageDestinationCreateWithData((CFMutableDataRef)data, (CFStringRef)@"org.khronos.ktx", 1, nil);
NSDictionary *properties = @{@"kCGImagePropertyASTCBlockSize": @(0x88)};
CGImageDestinationAddImage(destination, source, (CFDictionaryRef)properties);
CGImageDestinationFinalize(destination);
This code produce data in KTX format. I can not find any documentation about kCGImagePropertyASTCBlockSize parameter name so I consider that this code is undocumented.
I have two questions: Is it safe to use it? May Apple change this in future?
Is it hardware encoding or CPU encoding?
Is it possible to have correct blending with MTLPixelFormat.r8Unorm texture?
Here is what I use now but it works wrong:
		private func createBrushDescriptor(library: MTLLibrary) -> MTLRenderPipelineDescriptor {
				let vertexDescriptor = MTLVertexDescriptor()
				vertexDescriptor.attributes[0].format = .float2
				vertexDescriptor.attributes[0].offset = 0
				vertexDescriptor.attributes[0].bufferIndex = 0
				vertexDescriptor.layouts[0].stride = 2 * MemoryLayout<simd_float1>.size
				vertexDescriptor.layouts[0].stepFunction = .perVertex
				vertexDescriptor.layouts[0].stepRate = 1
				
				let descriptor = MTLRenderPipelineDescriptor()
				descriptor.vertexFunction = library.makeFunction(name: "brush_vertex_function")
				descriptor.vertexDescriptor = vertexDescriptor
				descriptor.fragmentFunction = library.makeFunction(name: "brush_fragment_function")
				descriptor.colorAttachments[0].pixelFormat = .r8Unorm
				
				descriptor.colorAttachments[0].isBlendingEnabled = true
				descriptor.colorAttachments[0].rgbBlendOperation = .add
				descriptor.colorAttachments[0].sourceRGBBlendFactor = .one
				descriptor.colorAttachments[0].destinationRGBBlendFactor = .one
				
				descriptor.depthAttachmentPixelFormat = .invalid
				
				return descriptor
		}
But it works wrong.
I tried to use following code:struct FilePickerView: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> UIDocumentPickerViewController {
let documentPicker = UIDocumentPickerViewController(documentTypes: [(kUTTypeImage as String)], in: .open)
return documentPicker
}
func updateUIViewController(_ uiViewController: UIDocumentPickerViewController, context: Context) {
// TODO
}
}And present it like this:.sheet(isPresented: $showFilePicker) {
FilePickerView()
}But on macOS I see blank screen centered in my app window. I solution working on Catalyst.