Metal - MTLClearColor 란? (Metal by tutorials)
https://developer.apple.com/documentation/metal/mtlclearcolor
MetalClearColor는 MTKView로 선언한 view의 색을 지정 할 때 사용한다!
위의 Documentation에 따라 더 설명해보겠음!
1. MTLClearColor 생성자
1) init()
: 새로운 컬러의 structure을 반환한다
2) init(red: Double, green: Double, blue: Double, alpha: Double)
: red, green, blue, alpha 값을 사용해서 새로운 컬러의 structure를 반환한다. alpha 값은 투명도를 나타낸다.
2. MTLClearColor 생성자 매개변수 설명
각 매개변수들은 RGBA 각각에 해당하는 값을 나타내고 모두 Double형을 가진다.
3. Specifying clearing value(색변경하기)
1) var clearColor: MTLClearColor
: color attachment을 clearing 할 때 사용하는 것이다. ( clearing은 structure의 색을 변경할때 사용한다는 말인듯)
그리고 clearColor의 기본값은 (0.0, 0.0, 0.0, 1.0)(검은색) 이다.
2) func MTLClearColorMake(Double, Double, Double, Double) -> MTLClearColor
: color attachment을 clearing하는데에 사용되는 색상 값을 반환한다. (아래 4 번에서 추가 설명하겠음!)
4. MTLClearColorMake(_:_:_:_:)
https://developer.apple.com/documentation/metal/1437971-mtlclearcolormake
뜯어보면 이 함수를 호출할 때는 매개변수의 변수명을 작성하지 않아도 된다!
Swift에서 _(underscore)은 함수를 호출할 때 매개변수의 변수명을 생략해도 된다는 것을 의미함.
예를들어 _가 없었다면
MTLClearColor.MTLClearColorMake(red: 1.0, green:1.0, blue:1.0, alpha:1.0) 이런식으로 작성해야한다.
지금은 _가 있기때문에
MTLClearColor.MTLClearColorMake(1.0, 1.0, 1.0, 1.0) 이렇게 호출하면 된다.
예시 코드 (Metal by tutorials 책 참고)
import PlaygroundSupport
import MetalKit
// GPU를 사용할 수 있는지 확인하기
// 만약 안된다면 iOS Playground로 프로젝트를 생성해서 그렇다(iOS 시뮬레이터에서는 지원하지 않는다)
// -> macOS playground로 프로젝트 다시 생성하기
guard let device = MTLCreateSystemDefaultDevice() else{
fatalError("GPU is not supported")
}
// 아래 코드는 Metal render을 하기위한 MTKView를 나타낸다.
// MTKView는 MacOS에 있는 NSView와 iOS에 있는 UIView의 서브클래스이다.
let frame = CGRect(x:0,y:0,width:600,height:600)
let view = MTKView(frame: frame,device: device)
//MTLClearColor: RGBA 값을 나타낸다. 아래는 크림색을 나타냄.
//color값들은 clearColor에 저장되고 뷰의 색을 설정할 때 사용된다.
view.clearColor = MTLClearColor(red:1,green: 1,blue: 0.8, alpha: 1)
코드설명
view.clearColor = MTLClearColor(red:1,green: 1,blue: 0.8, alpha: 1)
MTKView 클래스 객체인 view에서 컬러값을 의미하는 변수인 clearColor에 접근한다(view.clearColor 로 접근).
그리고 view속성의 clearColor에 MTLClearColor(red:1,green: 1,blue: 0.8, alpha: 1)를 대입하여 새로운 색으로 변경해준다.