小编Mar*_*bar的帖子

对实现Equatable的结构数组的操作

我有一系列不同的结构,所有实现Equatable协议,并试图将其传递给期望集合的函数where T.Iterator.Element: Equatable.我知道如何通过使用类来解决这个问题,只需创建一个class Vehicle: Identifiable, Equatable,然后制作CarTractor实现Vehicle.但是,我想知道使用结构和协议是否可行?

这是我正在尝试做的一个人为的例子

//: Playground - noun: a place where people can play

protocol Identifiable {
    var ID: String { get set }
    init(ID: String)
    init()
}

extension Identifiable {
    init(ID: String) {
        self.init()
        self.ID = ID
    }
}

typealias Vehicle = Identifiable & Equatable

struct Car: Vehicle {
    var ID: String

    init() {
        ID = ""
    }

    public static func ==(lhs: Car, rhs: …
Run Code Online (Sandbox Code Playgroud)

arrays struct swift swift3

9
推荐指数
1
解决办法
644
查看次数

CVMetalTextureCacheCreateTextureFromImage在macOS 10.13上返回-6660

我正在将屏幕从iPhone设备记录到Mac。作为预览层,我直接从中收集样本缓冲区AVCaptureVideoDataOutput,从中创建纹理并使用渲染它们Metal。我遇到的问题是,在macOS中工作的代码10.13在更新到后就停止工作了10.13。即

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_currentSampleBuffer);

if (!imageBuffer) return;

CVPixelBufferLockBaseAddress(imageBuffer,0);
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);

CVMetalTextureRef metalTexture = NULL;
CVReturn result = CVMetalTextureCacheCreateTextureFromImage(nil,
                                                            self.textureCache,
                                                            imageBuffer,
                                                            nil,
                                                            self.pixelFormat,
                                                            width,
                                                            height,
                                                            0,
                                                            &metalTexture);

if (result == kCVReturnSuccess) {
    self.texture = CVMetalTextureGetTexture(metalTexture);
}
Run Code Online (Sandbox Code Playgroud)

返回值result = -6660(可以转换为通用值)kCVReturnError,可以在官方的Apple文档中看到,以及metalTexture = NULL

我使用的是像素格式MTLPixelFormatBGRG422,因为来自相机的样本是2vuy

作为metalTexture从创建的替代方法sampleBuffer,我现在正在创建一个中间件,NSImage如下所示:

    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(_currentSampleBuffer);
    NSCIImageRep …
Run Code Online (Sandbox Code Playgroud)

macos objective-c metal

5
推荐指数
1
解决办法
1061
查看次数

标签 统计

arrays ×1

macos ×1

metal ×1

objective-c ×1

struct ×1

swift ×1

swift3 ×1