ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MTL] MTLTexture
    iOS/Metal 2024. 8. 20. 19:38
    A resource that holds formatted image data.

     

    'GPU에서 처리할 수 있도록 정제된 이미지 정보를 갖고 있는 자원'을 추상화시켜 놓은 객체입니다.

     

    이 프로토콜을 직접 구현하지 말고 주어진 instance 생성 메서드들을 이용해서 생성해야 합니다 !

    Don’t implement this protocol yourself; instead, use one of the following methods to create a MTLTexture instance

     

    1. MTLTextureDescriptor 이용하기

    descriptor to texture

    MTLTextureDescriptor를 만들고 MTLDevice의 makeTexture(descriptor:) 를 사용해 texture를 생성할 수 있습니다.
    텍스처의 크기나 형식을 커스터마이징해야 하거나, 복잡한 렌더링 파이프라인에 사용될 텍스처를 생성할 때 적합합니다.

    let textureDescriptor = MTLTextureDescriptor()
    textureDescriptor.pixelFormat = .rgba8Unorm
    textureDescriptor.width = 512
    textureDescriptor.height = 512
    textureDescriptor.usage = [.shaderRead, .shaderWrite]
    
    let texture = device.newTexture(descriptor: textureDescriptor)

     

    texture data 를 갖고 있는 IOSurface 가 이미 있다면 makeTexture(descriptor:iosurface:plane:) 를 사용합니다.

     

    2. MTLTextureLoader 사용하기

    image to texture

    MTKTextureLoader를 사용해 image data 를 texture 로 만들 수 있습니다.

    func loadTextureUsingMetalKit(url: URL, device: MTLDevice) throws -> MTLTexture {
        let loader = MTKTextureLoader(device: device)
        
        return try loader.newTexture(URL: url, options: nil)
    }
    
    let textureURL = Bundle.main.url(forResource: "image", withExtension: "png")!
    let texture = loadTextureUsingMetalKit(url: textureURL, device: device)

     

    3.  makeTextureView 이미 존재하는 texture 에서 새로운 texture 만들기

    texture to texture

    이미 존재하는 texture 에서 새로운 texture를 생성할 수 있습니다.

    원래 텍스처와 같은 데이터를 공유하지만, 다른 픽셀 포맷(Red 8-bit)으로 접근하는 텍스처 뷰를 생성할 수 있습니다.

    let textureView = texture.makeTextureView(pixelFormat: .r8Unorm)

     

    4. MTLDrawable.texture 사용하기

    drwable to texture

    MTLDrawable은 렌더링 결과를 화면에 표시하기 위한 객체로 랜더링 결과를 texture로 사용할 때 사용합니다.

     


     

    한번 생성되면 크기, 타입, 픽셀 포멧 등 대부분의 정보는 불변하며,
    오직 pixel data만 변경 가능합니다.

    시스템 메모리의 픽셀 데이터를 텍스쳐로 복사하려면 replace 메서드를,
    픽셀 데이터를 시스템 메모리로 다시 복사하려면 getBytes 를 사용합니다.

     

    Reference

    - https://developer.apple.com/documentation/metal/mtltexture

     

    MTLTexture | Apple Developer Documentation

    A resource that holds formatted image data.

    developer.apple.com

    - https://developer.apple.com/documentation/metalkit/mtktextureloader

     

    MTKTextureLoader | Apple Developer Documentation

    An object that creates textures from existing data in common image formats.

    developer.apple.com

     

    'iOS > Metal' 카테고리의 다른 글

    [Metal] MTKView > Drawing Mode (Configuring the Drawing Behavior)  (0) 2023.04.05

    댓글

Designed by Tistory.