티스토리 뷰

iOS

[iOS] OpenGLES / Metal

Hani_Levenshtein 2021. 3. 5. 00:21

안녕하세요 Hani입니다.

OpenGLES is deprecated. consider migrating to metal instead 에러를 마주하여 작성한 포스팅입니다.

에러는 쉽게 풀렸지만 궁금증이 생겨서 몇 자 적어봅니다.


OpenGLES / Metal

2차원 이상, 특히 3차원에서의 복잡한 벡터 그래픽을 나타내기 위해선 GPU를 통한 하드웨어 가속 렌더링이 필요합니다.

OpenGL은 GPU를 통한 하드웨어 가속 렌더링을 도와주는 API라고 할 수 있습니다.

OpenGLES은 임베디드 시스템(ES. Embedded System)에서 사용하기 위한 OpenGL입니다.

여기서 임베디드 시스템의 예시는 iPhone, iPad 등이 되겠습니다.

 

OpenGLES is deprecated. consider migrating to metal instead

2018년에 OpenGLES는 iOS와 MacOS에서 더 이상 사용되지 않도록 변경되었습니다.

Metal은 Apple에 의해 2014년에 처음 등장하여 줄곧 개발된 그래픽 라이브러리로, OpenGL의 대안이 됩니다.


Metal

OpenGL(ES)에서는 CPU가 GPU에게 명령하고 GPU가 명령을 처리하면 다시 CPU가 명령하는 것을 반복합니다.

CPU와 GPU가 성능이 1:1로 비슷하다면 이상적인 그림이 나오겠지만 최근 몇 년간 GPU는 CPU에 비해 월등한 성능 향상을 이뤄냈습니다.

 

 

이는 CPU와 GPU의 이상적인 Collaboration을 깨트립니다.

GPU가 순식간에 일을 처리한 후, CPU의 명령을 기다려야 하기 때문에 Pipeline의 병목 현상을 일으킵니다.

GPU의 성능을 최대한 활용하기 위해서 OpenGL(ES) 보다 나은 API가 요구되는 것은 필연적 수순입니다.

 

또한 SoC(System-on-Chip)가 탑재된 기기 또는 스마트폰, 태블릿 PC처럼 GPU의 성능이 정해져 있는 디바이스에서는  OpenGL처럼 그래픽 처리 기능이 GPU와 독립적인 API를 사용할 필요가 없습니다.

 

 

특정 GPU만 사용할 수 있는 기능을 담은 Metal API는 훌륭한 성능을 보여줍니다.

OpenGL에서 문제가 되었던 병목 현상이 완화되며 멀티 스레드를 통한 데이터 병렬 컴퓨팅 작업도 가능합니다.


import UIkit

기존 OpenGLES / OpenGL 자리를 차지하고 있던 곳을 Metal이 몰아낸 모습입니다.

여기서 자주 사용하는 최상단 UIKit같은 고수준 프레임워크는 하위의 프레임워크들을 포함하고 있습니다.

우리는 import UIkit을 통해 이미 Metal API를 사용하고 있었다고 할 수 있습니다.


출처

developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CoreAnimation_guide/Introduction/Introduction.html

developer.apple.com/videos/play/wwdc2014/603/

www.anandtech.com/show/9223/gfxbench-3-metal-ios

댓글