I would like to alter vertex data from a model imported with Model I/O in iOS 10. I'm doing this to normalize the vertex positions, change their color values, and some other fun things.
After I create the mesh, I'd like to get to buffer data to change it. So I dive in and grab the MTLBuffer contents:
MTKMesh >> vertexBuffers >> vertexBuffer >> buffer >> contents()
The problem is, on iOS 9 I get back an array with the values I expect, in order, according to the vertexDescriptor I submitted to the MDLAsset. But in iOS 10, what I get back is gibberish.
To demonstrate, in my model object's init method, I'm printing the values of the vertexBuffer:
init(kitMesh: MTKMesh, modelMesh: MDLMesh, device: MTLDevice) {
let vertexBuffer = kitMesh.vertexBuffers[0]
let floatData = vertexBuffer.buffer.contents().bindMemory(to: Float.self, capacity: vertexBuffer.length / MemoryLayout<Float>.stride)
for i in 0..<100 {
print("data [\(i)] = \(floatData[i])")
}
}
Console on iOS 9 (correct - matches vertex descriptor):
data [0] = -1.30764
data [1] = 0.142407
data [2] = 2.24837
data [3] = -0.0059
data [4] = 0.986
data [5] = -0.1665
data [6] = 0.0
data [7] = 0.0
data [8] = 0.0
data [9] = 1.0
data [10] = 0.00255011
data [11] = -1.72002
data [12] = 0.072178
data [13] = 1.84713
etc...
Console on iOS 10:
data [0] = 0.0
data [1] = 1.4013e-45
data [2] = 2.8026e-45
data [3] = 4.2039e-45
data [4] = 5.60519e-45
data [5] = 7.00649e-45
data [6] = 8.40779e-45
data [7] = 9.80909e-45
data [8] = 1.12104e-44
data [9] = 1.26117e-44
data [10] = 1.4013e-44
data [11] = 1.54143e-44
data [12] = 1.68156e-44
etc...
How can I alter the vertex buffer in iOS 10? Is there a different method I don't know about?