Use CPU to calculate update the shader.
func transform(_ transform: Transform) async throws -> ShapeResource {
if (transform.scale == .one) {
return self.offsetBy(rotation: transform.rotation, translation: transform.translation)
} else {
let mesh = await MeshResource(shape: self)
var contents = mesh.contents
mesh.contents.models.forEach { model in
var mutableModel = model
model.parts.forEach { part in
var mutablePositions: [SIMD3<Float>] = []
part.positions.forEach { position in
let updatedPosition = transform.matrix * SIMD4<Float>(position, 1)
mutablePositions.append(updatedPosition.xyz)
}
var mutablePart = part
mutablePart.positions = MeshBuffer<SIMD3<Float>>(mutablePositions)
mutableModel.parts.update(mutablePart)
}
contents.models.update(mutableModel)
}
try await mesh.replace(with: contents)
return try await ShapeResource.generateConvex(from: mesh)
}
}