[OpenGL ES] EGL이란?

Park Sejin·2022년 8월 24일
1
post-thumbnail

EGL 소개

EGL Reference Page를 살펴보면 아래와 같은 설명이 있습니다.

EGL은 크로노스 렌더링 API(OpenGL, OpenGL ES, OpenVG)와 아래 단의 네이티브 플랫폼 윈도우 시스템 사이의 인터페이스 이다. EGL은 그래픽스 컨텍스트 관리, 서피스/버퍼 바인딩, 렌더링 동기화 를 처리한다.

하지만 EGL을 처음 다루는 입장에서는 모르는 용어들이 많아서 EGL이 무엇인지 감이 잘 잡히지 않습니다.

  • 네이티브 플랫폼 윈도우 시스템(Native Platform Window System)

  • 그래픽스 컨텍스트(Graphics Context)

  • 인터페이스(Interface)

  • 서피스/버퍼(Surface/Buffer)

  • 렌더링 동기화(Rendering Synchronization)

위에 제가 모르는 용어들을 모아 놓았습니다. 하나씩 의미를 알아본 뒤, EGL Reference Page의 설명을 다시 한번 알아보겠습니다.

  • 네이티브 플랫폼 윈도우 시스템

    • 윈도우 시스템은 디스플레이 스크린의 각 부분을 관리하는 소프트웨어입니다. 다시 말하면 창, 아이콘, 메뉴, 마우스 커서로 구현된 일종의 그래픽 사용자 인터페이스(GUI)를 의미합니다. 여러 운영체제에는 각 플랫폼에 맞는 윈도우 시스템이 존재하고 네이티브 플랫폼 윈도우 시스템은 해당 특정 플랫폼의 윈도우 시스템을 의미합니다.
  • 그래픽스 컨텍스트

    • 그래픽스 컨텍스트는 윈도우의 렌더링 데이터를 저장하고 있는 구조체입니다. 그래픽스 컨텍스트에 저장된 데이터로 각 윈도우를 구분할 수 있습니다. 때문에 서로 다른 윈도우들을 개별적으로 렌더링할 수 있습니다.
  • 인터페이스

    • 인터페이스는 서로 다른 두 개 이상의 시스템 사이에서 정보나 신호를 주고받는 접점 또는 경계면을 의미합니다. EGL은 렌더링 API와 윈도우 시스템 사이에서 정보를 주고 받습니다.
  • 서피스/버퍼

    • 이미지를 렌더링하려면 렌더링 과정에서 생성된 이미지를 저장할 메모리를 할당해야 합니다. 이 할당된 메모리를 이미지 버퍼라 하고, 이미지 버퍼를 추상화한 것이 서피스입니다. 추상화된 서피스로만으로 이미지 버퍼 자체에 대해 신경 쓰지 않고 이미지 버퍼를 관리할 수 있는 장점이 있습니다.
  • 렌더링 동기화

    • 렌더링 동기화는 입력받은 명령을 OpenGL 렌더링 파이프라인에서 완전히 실행했는지 확인하는 프로세스입니다.

위의 용어 설명을 바탕으로 EGL Reference Page의 EGL 설명을 다시 하면

EGL은 크로노스 렌더링 API(OpenGL, OpenGL ES, OpenVG)와 아래 단에 존재하는 윈도우즈, 리눅스, 맥OS 등의 윈도우 시스템 사이의 정보를 주고 받는 역할을 한다. EGL은 그래픽스 컨텍스트를 사용하여 윈도우를 관리하고, 렌더링할 서피스와 그래픽스 컨텍스트를 연결하고, OpenGL 렌더링 파이프라인에서 렌더링 명령들이 완전히 실행되도록 한다.

EGL의 목적

위에서 간단하게 EGL에 대해서 알아보았습니다. 그렇다면 EGL을 왜 사용하는가에 대해 궁금해집니다. OpenGL로 그래픽스 프로그래밍을 하는데 EGL을 반드시 사용해야하는걸까요?

EGL 1.5 Specification을 보면 다음과 같은 문장이 있습니다.

EGL은 다양한 운영체제(안드로이드, 유닉스, 윈도우즈)와 플랫폼(X11, 윈도우즈와 같은 윈도우 시스템과 GBM과 같은 디스플레이 없이 렌더링을 지원하는 플랫폼) 상에서 구현할 수 있도록 만들어졌습니다. 또한 플랫폼의 특정 네이티브 렌더링 API를 통해 특정 타입의 EGL surface으로 렌더링을 허용할 수 있습니다.
가능한 범위 내에서, EGL 자체는 플랫폼 또는 렌더링 API와 관련된 정의 및 개념과 무관합니다.

OpenGL은 그래픽 연산을 위해 작성된 인터페이스 스펙일뿐입니다. 이 인터페이스가 어떻게 구현되는지는 OpenGL의 영역이 아닙니다. 따라서 모든 플랫폼들은 각기 다른 방식으로 OpenGL 컨텍스트를 구현합니다. 윈도우즈에서는 WGL을 사용하고, X-Windows에서는 GLX를 사용하고, OSX에서는 CGL을 사용합니다. EGL은 플랫폼 별 이러한 차이들을 추상화 해놓은 라이브러리입니다. 따라서 EGL을 사용하여 각 플랫폼 별 다른 방식으로 OpenGL 윈도우를 관리하지 않고 통합적으로 관리할 수 있는 장점이 있습니다. 물론 이런 목적의 라이브러리가 EGL있는 것은 아닙니다. GLUT, GLFW, SDL, SFML와 같은 비슷한 목적의 라이브러리도 존재합니다.

참고

0개의 댓글