iOS/라이브러리

[Library, Metal] vertex를 index로 메모리 절약하기

검은참깨두유vm 2023. 2. 3. 15:10
반응형

iOS 16.1, Xcode 14.1, Swift 5, Playground 환경에서 진행했습니다.

 

기존에 삼각형을 그리려면 변수를 저장하여야하는데,

수많은 삼각형을 그리게 되면, 겹치는 꼭지점이 무수히 많아 메모리가 낭비될 것입니다.

그리하여 겹치는 부분은 제거하고 같은 꼭지점은 index로 접근하는 방법이 있습니다.

 

let vertices: [Float] = [
    -1, 1, 0,
    -1, -1, 0,
    1, -1, 0,
    1, 1, 0
]

let indices: [UInt16] = [
    0, 1, 2,
    2, 3, 0
]

 

indices에서 첫번째 줄 0, 1, 2는 

vertices[0], vertices[1], vertice[2]의 지점을 사용한다는 의미입니다.

indices 두번째 줄 2, 3, 0은

vertices[2], vertices[3], vertice[0]의 지점을 사용한다는 의미입니다.

 

인덱스버퍼를 생성하고, commandEncoder에서 index를 활용하여 4가지 vertex를 통해 사각형을 그릴 수 있습니다.

 

var indexBuffer = device.makeBuffer(bytes: indices, length: indices.count * MemoryLayout<UInt16>.size)

commandEncoder?.drawIndexedPrimitives(types: .triangle, indexCount: indices.count, indexType: .uint16, indexBuffer: indexBuffer!, indexBufferOffset: 0)

 

참조 : https://www.youtube.com/watch?v=GLDYreVv4Ns&list=PL23Revp-82LJG3vcDPm8w7b5HTKjBOY0W&index=4 

반응형