Swift 3 / Xcode 9. MTLBuffer 'didModifyRange' недоступен

Я пытаюсь сообщить MTLBuffer, что диапазон изменился, но компилятор не позволит мне сделать это:

vertexBuffer?.didModifyRange(NSMakeRange(0,MemoryLayout<MetalVertex>.stride*nbVerts))

он просто говорит: "didModifyRange" недоступен, почему это так?

Спасибо

2 ответа

В Свифте didModifyRange занимает Range<Int> не NSRange, Так что вместо использования NSMakeRange, вы можете построить один, используя ..< оператор.

vertexBuffer?.didModifyRange(0 ..< MemoryLayout<MetalVertex>.stride * nbVerts)

Вы ориентируетесь на iOS? Согласно документации Apple ,didModifyRangeподдерживается только в macOS и Catalyst. Это также применимо только к буферам, созданным с помощьюMTLStorageModeManaged, который имеет те же ограничения.

Если вы ориентируетесь на несколько платформ, вам нужно будет сделать обе условными, см.:

Swift проверка доступности для macCatalyst

Другие вопросы по тегам