https://developer.apple.com/documentation/metal/mtlbuffer
A resource that stores data in a format defined by your app.
앱에서 정의하고 있는 포맷으로 데이터를 저장하고 있는 리소스입니다.
protocol MTLBuffer
MTLBuffer
객체는 생성된 MTLDevice
로만 함께 사용될 수 있습니다. 이 프로토콜을 직접 구현하지 않아야 합니다. 대신 MTLBuffer
객체를 생성하려면 아래에 있는 MTLDevice
메소드를 사용하시기 바랍니다.
makeBuffer(length:options:)
는 새로운 스토리지 할당과 함께 MTLBuffer
객체를 생성합니다.makeBuffer(bytes:length:options:)
는 기존 스토리지 할당에서 새로운 할동으로 데이터를 복사해서 MTLBuffer
객체를 생성합니다.makeBuffer(bytesNoCopy:length:options:deallocator:)
는 기존 스토리지 할당을 재사용하고 새로운 스토리지 할당을 하지 않으면서 MTLBuffer
를 생성합니다.메탈 프레임워크는 MTLBuffer
에 대한 어떠한 컨텐츠에 대해서도 알지 못하며 크기만 알고 있습니다. 버퍼에서 데이터의 포맷을 정의해야 하며, 앱과 셰이더가 데이터를 어떻게 읽고 쓰는지를 보장해줘야 합니다. 예를 들어 저장하려고 하는 버퍼 및 메모리 레이아웃에, 저장하려는 데이터 정의가 담긴 구조체를 셰이더에 생성할 수 있습니다.
관리되는 리소스 스토리지 모드(MTLStorageMode.managed
)와 함께 버퍼를 생성하길 원한다면, 메탈이 모든 변경사항을 GPU로 복사하도록 didModifyRange(_:)
를 호출해서 메탈에게 알려줘야 합니다.