ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 그래픽 소프트웨어, 라이브러리 정리
    개발/기술 2018. 5. 6. 10:27

    내가 일하는 곳 옆 소파트가 그래픽 관련된 일을 하는 곳이라서 같이 회의할 때마다 wayland, opengl, surface flinger과 같은 그래픽 라이브러리 용어를 자연스럽게 흘려 듣게 된다. 처음에는 생소했지만 어느정도 시간이 지나면 이들의 역할과 각각의 상관관계를 파악하게 될 줄 알았는데 만 2년이 지나도 용어 자체만 익숙해질뿐 이해 수준은 그대로인걸 보니 의도적인 노력 없이는 안되는 것 같다. 그래서 이번 포스트를 통해 이제껏 귀동냥으로 들은 용어와 그래픽의 기초적인 동작을 정리해보려고한다.


    그래픽을 공부하기전에 잠깐 화가가돼서 그림을 그린다고 생각해보자. 지금처럼 태블릿을 이용해서 웹툰을 그리는 화가가 아니라 10년전 팔레트와 붓을 이용해서 그리는 화가 말이다. 그림을 그리기 위해선 어떤 소도구가 필요할까?


    그림 1. 화가 '김원'의 캐리커처? 라고 한다.


    먼저 자신의 작품을 담을 도화지가 필요하다. 그리려는 그림의 사이즈에 맞는 적당한 크기를 골라야 하고 이왕이면 여러개의 작품을 동시에 관리 할 수 있는 스케치북이면 더 좋겠다. 좀더 편안하게 작업하기 위해 이젤도 있으면 좋겠지만 필수는 아니다. 스케치북에 옮기기 전 물감을 담고 새로운 색을 조합하기 위한 팔레트도 필요하다. 많은 색을 담을 수 있으면 좋겠지만 그렇다고 너무 무거워지면 한손에 쥐고 작업하기 어려울 수 있으니 본인이 편리하다고 느끼는 것이면 충분하다. 마지막으로 팔레트에 담은 물감을 스케치북 화폭에 옮길 수 있는 붓과 물감이 필요하다. 작품에 독특한 질감을 주고 싶다면 특별한 붓과 물감이 필요 할 수 있으니 이점을 잘 고려해서 선정하도록 하자. 스케치북, 팔레트, 붓과 물감만 있으면 그림을 그리기 위한 기본적인 소도구는 준비된 셈이다.


    컴퓨터 디스플레이 화면에 UI를 그리는 것도 이와 비슷하다. GUI 개발자가 화면에 Widget 하나를 띄우려고 한다고 해보자. GUI 개발자는 자신의 작품을 컴퓨터 화면에 표현하고 싶은 화가라고 볼 수 있다. 개발자는 자신의 widget을 표현 할 수 있는 공간(스케치북)이 필요하다. 이 공간은 디스플레이와 연결이 되어 있어 자신의 출력물이 디스플레이 화면에 나와야 한다. 이때 이런 역할을 하는 것이 X-Server(Ubuntu 계열) 또는 Surface Flinger(Android 시스템)와 같은 디스플레이 서버다. 이 소프트웨어는 사용자가 값을 입력할 수 있는 버퍼를 제공하고 개발자는 이 버퍼에 값을 씀으로써 화면에 표현할 수 있게 된다.


    그런데 사용자가 직접 display server에서 메모리를 할당 받고 이곳에 값을 쓰는 것은 꽤나 번거로운 일이다. 그래서 그래픽 소프트웨어 개발자들은 이 일을 대신 하는 다양한 툴킷(GTK, QT 등등)을 만들었다. 그림 그린 것으로 치면 팔레트라 볼 수 있는데 스케치북을 관리 할 수 있는 특별한 기능이 있는 팔레트라고 보면 된다. 사용자가 공간을 요청하면 툴킷은 직접 시스템에서 사용되는 디스플레이 서버로부터 메모리 공간을 대신 받아 온다.


    툴킷별로 glib(GTK용 그래픽 라이브러리), xlib(X윈도우용 라이브러리)과 같은 특정 라이브러리를 참조해서 사용하는데 이것들은 해당 할당받은 디스플레이 서버에 값을 쓸 수 있는 함수들이다. 툴킷은 이 함수들을 적절하게 이용해 할당 받은 공간에 값을 쓸 수있는 기능도 제공한다. 심플하게 시스템상에 쩜하나 찍는 것 뿐만 아니라 맨 위창에 뜨는 제목을 설정하고 취소 버튼을 추가하는 것처럼 소프트웨어에서 통상적으로 사용하는 UI도 툴킷을 이용해서 쉽고 간결하게 만들 수 있다. 툴킷 사용자는 공간 배치와 색, 그리고 화면에 표현할 그림을 입력 하기만 하면 툴킷이 대신해서 메모리에 값을 입력하고 화면에 그려준다. 툴킷이 시스템 환경에 맞는 붓을 제공하는 것이라고 볼 수 있다.



    그림 2. 그래픽 라이브러리 스택


    지금까지 설명한 내용을 위의 그림처럼 표현 할 수 있다. 여러 가지 소프트웨어가 나오는데 여기서 이 포스트에서 다룬 내용들만 추출하고 공부한 내용을 정리해보자.

    개발자는 GTK, QT, EFL와 같은 툴킷(주황색 블록)을 이용해서 X-Server, Wayland, SF와 같은 디스플레이 서버(하늘색 블록)로 부터 버퍼를 할당 받고 툴킷이 제공해준 라이브러리를 이용해 2D/Media/3D Application(파란색 블록)이란 작품을 만들었다. 


    참고자료


    그림 1 : http://dh.aks.ac.kr/Encyves/wiki/index.php/%EA%B9%80%EC%9B%90(%ED%99%94%EA%B0%80) 

    그림 1 : By Shmuel Csaba Otto Traian, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=27799196

    '개발 > 기술' 카테고리의 다른 글

    Libgdx - 소개 및 주요함수 정리  (0) 2018.06.20
    objdump 를 이용한 바이너리 깨보기  (0) 2018.05.29
    Yocto 내부 파일 분석  (1) 2016.10.02
    Yocto 작동방식  (0) 2016.10.01
    Yocto 튜토리얼  (2) 2016.10.01

    댓글

Designed by Tistory.