Objective c 在Swift中从vDSP DSPSplitComplex创建金属缓冲区

Objective c 在Swift中从vDSP DSPSplitComplex创建金属缓冲区,objective-c,swift,struct,vdsp,metal,Objective C,Swift,Struct,Vdsp,Metal,我试图在Swift中将Apple vDSP的DSPSplitComplex结构传递给Apple Metal的newBufferWithBytesNoCopy,以创建一个金属缓冲区对象: // Create vDSP Split Complex data type var iData1Real = [Float](count: Int(lenIData1), repeatedValue: 1.0) var iData1Imag = [Float](count: Int(le

我试图在Swift中将Apple vDSP的DSPSplitComplex结构传递给Apple Metal的newBufferWithBytesNoCopy,以创建一个金属缓冲区对象:

    // 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)
        }
      }
在创建bufferIData1的行中

DSPSplitComplex是两个不可分配指针的结构。如何从两个UnsafeMutablePointer的结构中提取UnsafeMutablePointer?&iData1没有得到指向结构的指针吗

我试图传递iData1.realp并指定要覆盖realp和imagp的字节数。这消除了编译错误,但我不确定realp和imagp是否以连续方式驻留在内存中


提前感谢您的帮助。

将第一个参数传递给
newBufferWithBytesNoCopy

当与使用指针的C API交互时,prefix
&
已经(有效地)为您获取指向前缀值的指针。使用
unsafemeutablepointer
初始值设定项并向其传递
&
-前缀值,实际上会得到一个双指针,这可能不是您调用的API想要的


有关其他详细信息和其他有效语法,请参见在Cocoa和Objective-C中使用Swift。

我猜是
newBufferWithBytesNoCopy的第一个参数中的
不可分配指针(&iData1)
。你能在那里通过
&iData1
吗?谢谢@rickster!它解决了这个问题。在这种情况下,&iData1是否自动强制转换为Unsafemtablepointer?这两者之间有什么区别(例如,Unsafemeutablepointer(&iData1)与just&iData1)?谢谢你的帮助!这在着色器中是什么样子的?您能否显示支持DSPSplitComplex的结构或其他声明?
Type 'MTLBuffer!' does not conform to protocol 'MTLBuffer'