[iOS] Metal에서 GPU 컴퓨팅(4) MTKView
4939 단어 iOSObjective-C금속XcodeGPU
지금까지 Metal의 GPU 컴퓨팅에 대해 해설 기사를 써 왔습니다.
[iOS] Metal에서 GPU 컴퓨팅 (1)
[iOS] Metal에서 GPU 컴퓨팅 (2)
[iOS] Metal에서 GPU 컴퓨팅 (3)
이 기사에서는 지난 번에 계속해서 Apple이 제공하는 샘플 코드에 대해 설명합니다.
취급하는 샘플 코드는, 전회와 같은 라이프게임의 앱, MetalGameOfLife입니다.
MetalGameOfLife
(실행 화면)
이번에는 GPU 컴퓨팅과는 조금 떨어져 있지만 샘플 코드의 MTKView에 대해 설명합니다.
MTKView는 MetalKit 프레임워크에 포함된 UIView를 상속한 클래스로, 비교적 간단한 방법으로 Metal에 의한 그리기를 할 수 있습니다.
MTLView에는 다음 세 가지 드로잉 모드가 있습니다.
이 샘플 코드는 기본값인 1. 모드를 사용합니다.
이전의 반복이 됩니다만, 이 샘플 코드는, 주로 이하의 파일로 구성되어 있습니다.
AAPLRender.h
AAPLRender.m
AAPLViewController.h
AAPLViewController.m
Sharder.metal
이 중 AAPLRender.m에는 병렬 컴퓨팅 및 드로잉의 CPU측의 로직이 Shader.metal에는 정점 셰이더, 프래그먼트 셰이더, GPU 컴퓨팅용 셰이더가 쓰여져 있습니다.
여기에서는 샘플 코드 내에서 MTKView의 사용 부분을 설명합니다.
Storyboard의 Custum Class에 MTKView를 설정한 다음 AAPLViewController.m에 다음과 같은 설명이 있습니다.
AAPLViewController.m
self.metalView = (MTKView *)self.view;
...
self.metalView.device = MTLCreateSystemDefaultDevice();
MTLCreateSystemDefaultDevice()는 MTLDevice 프로토콜을 따르는 객체를 반환하지만 MTKView 객체는 Metal 관련 객체를 만들고 제어하는 데 필요합니다.
그런 다음 AAPLRender.m 쪽 코드입니다.
AAPLRender.m
MTLRenderPassDescriptor *renderPassDescriptor = self.view.currentRenderPassDescriptor;
...
[commandBuffer presentDrawable:self.view.currentDrawable];
MTLRenderPassDescriptor 객체의 취득과, draw area(currentDrawable)의 취득에 이용하고 있습니다.
MTLRenderPassDescriptor는 명령 인코더를 생성하기 위해 텍스처와 같은 부착물을 저장합니다. 명령 인코더에 대해서는 나중에 설명합니다.
다음은 MTLView에서 호출하는 대리자 메서드입니다.
AAPLRender.m
- (void)mtkView:(nonnull MTKView *)view drawableSizeWillChange:(CGSize)size
//描画領域変更時の処理
}
...
- (void)drawInMTKView:(nonnull MTKView *)view
{
//描画毎の処理
}
화면의 재묘화가 요구될 때마다, 델리게이트 메소드인 drawInMTKView:가 불려지거나, MTKView의 서브 클래스의 drawRect: 메소드가 불려 갑니다. 이 중 하나를 구현해야합니다.
이번에는 라이프 게임 샘플 코드 내에서 MTKView의 해설을 실시했습니다.
다음 번 이후, 또 다른 개소에 대한 해설을 실시해 갑니다.
Reference
이 문제에 관하여([iOS] Metal에서 GPU 컴퓨팅(4) MTKView), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuky_az/items/a2556edcfa417b7d912c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)