- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试将 Apple vDSP 的 DSPSplitComplex 结构传递给 Swift 中的 Apple Metal 的 newBufferWithBytesNoCopy 以创建 Metal 缓冲区对象:
// Create vDSP Split Complex data type
var iData1Real = [Float](count: Int(lenIData1), repeatedValue: 1.0)
var iData1Imag = [Float](count: Int(lenIData1), repeatedValue: 2.0)
withExtendedLifetime(iData1Real) { () -> () in
withExtendedLifetime(iData1Imag) {
var iData1 = DSPSplitComplex(realp: &iData1Real, imagp: &iData1Imag)
// Create a 1D buffer for the first input data (idata1)
var bufferIData1: MTLBuffer = device.newBufferWithBytesNoCopy(UnsafeMutablePointer<Void>(&iData1), length:Int(lenIData1)*sizeof(Float32), options:nil, deallocator:nil)
}
}
这会导致错误
Type 'MTLBuffer!' does not conform to protocol 'MTLBuffer'
在创建 bufferIData1 的行中。
DSPSplitComplex 是两个 UnsafeMutablePointer 的结构。如何从两个 UnsafeMutablePointer 的结构中提取 UnsafeMutablePointer? &iData1 不是得到指向该结构的指针吗?
我尝试传递 iData1.realp 并指定字节数以覆盖 realp 和 imagp。这消除了编译错误,但我不确定 realp 和 imagp 是否以连续的方式驻留在内存中。
提前感谢您的帮助。
最佳答案
只需将 &iData1
作为第一个参数传递给 newBufferWithBytesNoCopy
。
当与采用指针的 C API 交互时,前缀 &
已经(有效地)为您提供指向前缀值的指针。使用 UnsafeMutablePointer
初始值设定项并将 &
前缀值传递给它本质上会为您提供双指针,这可能不是您调用的 API 想要的。
参见 Pointers在 Using Swift with Cocoa and Objective-C 中了解更多详细信息和其他有效语法。
关于objective-c - 在 Swift 中从 vDSP DSPSplitComplex 创建 Metal 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27260682/
据我了解,UnsafePointer 将指针对象呈现为不可变的,而 UnsafeMutablePointer 将指针对象呈现为可变的。但是 vDSP 函数的签名 vDSP_zrvmul如下: func
我正在尝试将 Apple vDSP 的 DSPSplitComplex 结构传递给 Swift 中的 Apple Metal 的 newBufferWithBytesNoCopy 以创建 Metal
我是一名优秀的程序员,十分优秀!