我试图告诉MTLBuffer范围已更改,但编译器不允许我这样做:
vertexBuffer?.didModifyRange(NSMakeRange(0,MemoryLayout<MetalVertex>.stride*nbVerts))
字符串它只是说:“didModifyRange”不可用,为什么?谢了
goqiplq21#
在Swift中,didModifyRange需要一个Range<Int>,而不是NSRange。因此,您可以使用..<运算符来构造一个,而不是使用NSMakeRange。
didModifyRange
Range<Int>
NSRange
..<
NSMakeRange
vertexBuffer?.didModifyRange(0 ..< MemoryLayout<MetalVertex>.stride * nbVerts)
字符串
sdnqo3pr2#
您的目标用户是iOS吗?根据Apple Documentation,didModifyRange仅在macOS和Catalyst上受支持。它也仅适用于使用MTLStorageModeManaged创建的缓冲区,这些缓冲区具有相同的约束。如果您的目标是多个平台,则需要将两者都设置为条件,请参阅:Swift availability check for macCatalyst的
MTLStorageModeManaged
2条答案
按热度按时间goqiplq21#
在Swift中,
didModifyRange
需要一个Range<Int>
,而不是NSRange
。因此,您可以使用..<
运算符来构造一个,而不是使用NSMakeRange
。字符串
sdnqo3pr2#
您的目标用户是iOS吗?根据Apple Documentation,
didModifyRange
仅在macOS和Catalyst上受支持。它也仅适用于使用MTLStorageModeManaged
创建的缓冲区,这些缓冲区具有相同的约束。如果您的目标是多个平台,则需要将两者都设置为条件,请参阅:
Swift availability check for macCatalyst的