-
Fill the Yellow textureOpenGL/iOS_Metal 2018. 10. 7. 02:49
안녕하세요 dely입니다:)
raywenderlich를 참고하여 Metal로 색깔 texture를 출력하는 것을 만들어보려고 합니다.
(참고영상: Getting Started with Metal)
오늘의 목표!!
지난번 공부한 Hello Metal에서 이미지 프로세싱 작업을 위한 몇가지 step을 따라 화면을 노란색으로 채우는 앱을 만들어 보려고 합니다.
1. Device 생성
- Main.storyboard에서 View를 클릭한 후 Custom Class란에 MTKView를 써서 연결합니다. (MetalKit을 사용하여 작업한 결과를 화면에 출력해주기 위함)
- ViewController.swift에서 MetalKit을 import 하고, MTKView와 MTLDevice type 프로퍼티를 추가합니다. 또 viewDidLoad()에서 metalView.device를 초기화합니다.
import UIKit
import MetalKit
class ViewController: UIViewController {
var metalView: MTKView {
return view as! MTKView
}
var device: MTLDevice!
override func viewDidLoad() {
super.viewDidLoad()
metalView.device = MTLCreateSystemDefaultDevice()
}
}
2. metalView color 설정 (이번 글에서는 shader를 쓰지않음 - pipeline state는 다음 글에서)
enum Colors {
static let myYellow = MTLClearColor(red: 1.0, green: 1.0, blue: 0.0, alpha: 1.0)
}
class ViewController: UIViewController {
override func viewDidLoad() {
metalView.clearColor = Colors.myYellow
}
}
3. Command Queue 생성
- GPU가 실행시킬 작업들을 담아둘 Command Buffer의 list인 CommandQueue를 생성하고, 초기화 합니다. (device 프로퍼티에 metalView.device를 초기화하여 사용)
var commandQueue: MTLCommandQueue!
override func viewDidLoad() {
device = metalView.device
commandQueue = device.makeCommandQueue()
}
4. Command Buffer 생성
- 앞에서 초기화 한 commandQueue를 통해 commandBuffer 생성 및 초기화합니다.
let commandBuffer = commandQueue.makeCommandBuffer()
5. Command Encoder 생성
- 지금까지 생성 및 초기화를 통해 만든 프레임을 렌더링하기 위해 Command Encoder를 생성한다. 텍스쳐로부터 작성된 render pass (현재 view의 values)를 가져오는 매개변수를 넘겨줍니다.
let commandEncoder = commandBuffer?.makeRenderCommandEncoder(descriptor: metalView.currentRenderPassDescriptor!)
6. Commit Command Buffer
- Encoder에서 모든 생성이 완료되었음을 선언합니다.
commandEncoder?.endEncoding()
- draw가 완료되자마자 새로운 텍스쳐가 표시되도록 합니다.
commandBuffer?.present(metalView.currentDrawable!)
- 그 후에 트렌젝션을 커밋하여 GPU로 작업을 보냅니다.
commandBuffer?.commit()
그럼 완성!
이제 디바이스에서 실행시키면 목표했던 노랑 화면이 나오게됩니다.
(시뮬레이터에서의 metal 지원은 아직 되지 않기 때문에 꼭 폰을 연결해야합니다.)
반응형'OpenGL > iOS_Metal' 카테고리의 다른 글
Drawing Primitives (0) 2019.07.03 Hello Again, Metal (0) 2019.07.01 Add red triangle (0) 2018.10.13 Refactoring Fill the Yellow texture (0) 2018.10.12 Hello Metal (0) 2018.10.06