본문 바로가기

프로그래밍

OpenGL로 GUI 를 만든다면?

OpenGL은 이드 소프트웨어가 둠과 퀘이크의 그래픽 라이브러리로 사용된 이후 폭발적인 인기를 끌고 마이크로소프트의 Direct 3D의 독점을 막아낸 3D 그래픽 라이브러리 입니다. 90년대 후반 3D 관련 산업이 뜨기 시작한 이후로 현재까지 3D 기술은 엄청난 발전을 이룩하게 되었습니다. Nvidia, AMD같은 그래픽카드 회사들의 엄청난 경쟁속에서 그래픽카드 또한 엄청나게 발전하였습니다. 그 결과 OpenGL은 쓰이지 않는 곳이 없게 되었습니다.

본론에 들어가기 앞서 그래픽카드를 뜻하는 GPU와 CPU의 차이에 대해 간략하게 설명하겠습니다. 이 부분에 대해 별로 관심이 없으신 분은 바로 다음 문단으로 넘어가시면 되겠습니다. CPU는 주로 싱글코어에서의 연산능력이 발전해 왔고, 멀티코어 CPU가 등장하게 된 것은 그렇게 오래되지 않았습니다. 그래서 CPU는 코어수가 많지 않고 생성할 수 있는 쓰레드(간단하게 연산 단위라고 생각하시면 되겠습니다.)의 수가 많지 않습니다. 때문에 대량의 데이터를 연산하는데 있어서는 불리합니다. 하지만 CPU의 특성상 프로그램의 조건분기, 흐름제어등에는 효과적이기 때문에 프로그램은 일반적으로 CPU로 돌아가게 됩니다. GPU는 그야말로 연산만 하는 장치입니다. GPU는 다중코어를 기본으로 하고 있습니다. 일례로 Geforce GTX 480은 480개의 코어를 가지고 있고, 각각의 코어는 수천개의 쓰레드를 만들어 낼 수 있습니다. CPU와 비교해 보면 상상을 초월하는 쓰레드의 숫자이지요.

그래픽은 엄청난 양의 연산처리를 요구합니다. 그래서 GPU를 활용하는 것이 효과적이지요. GPU를 활용하는 방법중 가장 범용적인것이 OpenGL 라이브러리를 사용하는 것이고요. 여기서 그래픽이란 3D만 말하는 것이 아닙니다. 2D도 포함하는 내용이지요. 이미 2D 환경에서의 OpenGL은 많이 사용되고 있습니다. 맥 OS는 UI 전체가 OpenGL로 그려집니다. 그래서 맥 OS에서는 부드러운 애니메이션 효과를 볼 수 있는 것이지요.

프로그램의 GUI를 OpenGL로 구현하는 경우도 간간히 볼 수 있습니다. 위젯들을 모두 OpenGL로 그려 버리는거죠. 대표적인 경우가 Blender 3D이지요. Blender 3D는 프로그램 전체가 OpenGL로 그려지게 됩니다. 오픈소스 프로젝트인 Blender 3D는 초창기에 GUI를 어떤걸로 할지 논란이 많았습니다. 그 당시 강력하게 주장되던 GUI 툴킷은 GTK였지요. 하지만 OpenGL로 GUI를 구현하기로 결정났을때 많은 사람들이 반발을 했었습니다. 아무튼 Blender 3D는 OpenGL로 GUI를 만들게 되었고, 현재에 와서는 정확한 선택이였다는것을 입증했습니다.

OpenGL로 GUI를 구현하였을때는 많은 이점이 있습니다. 그 중 하나는 부드러운 애니메이션이 가능하다는 겁니다. GPU를 활용하는 그래픽 라이브러리이다 보니 그래픽 구현에 있어서는 유리합니다. 또 다른 이점은 크로스 플랫폼입니다. OpenGL은 어느 OS에서나 똑같이 구현되기 때문에 GUI 자체는 크로스플랫폼으로 제작할 수 있습니다. 또 커스터마이징이 자유로운 이점도 있겠네요. OpenGL은 시스템 종속적이 아니라 위젯들을 직접 다 만들어서 쓰기 때문에 굉장히 힘든 작업이 될 수 있는 동시에 위젯 커스터마이징이 굉장히 자유롭습니다. UI의 유연성 또한 OpenGL의 이점입니다. OpenGL은 2D GUI 툴킷과는 다르게 캔버스 위에 직접 다 그려버리기 때문에 상당한 유연성을 확보할 수 있습니다. 그 만큼 힘든 작업이 되기도 하겠지요.

Blender 3D를 보면 UI가 굉장히 유연해합니다. UI를 사용자 입맛에 맞게 완전히 커스터마이징 할 수 있습니다. 그리고 UI가 타 프로그램에 비해 굉장히 예쁘기도 하지요. 이런 점들을 보면 OpenGL로 GUI를 구현하는 것은 나쁘지 않은 선택이라고 생각합니다. 오히려 2D GUI 툴킷에 비해 더 낫다고도 할 수 있겠지요. 한가지 큰 단점이라면 OpenGL로 GUI를 구현하면 캔버스 위에 모든 위젯을 다 그려야 하기 때문에 힘든 작업이 될 수 있습니다. OpenGL 기반의 GUI 라이브러리인 GLUI를 사용하면 조금 수고를 덜 수는 있을 것입니다. GLUI는 GTK나 QT, wxWidget에 비하면 용량도 훨씬 작기 때문에 사용에 부담은 없습니다. 하지만 GLUI는 아직 불완전한 GUI 툴킷이기 때문에 그렇게 만족스럽지는 않을 겁니다.

아무튼 앞으로는 많은 프로그램들이 OpenGL GUI 기반으로 나오지 않을까 싶습니다. 물론 단점도 있지만 장점이 단점을 커버하고 남을 정도 이니까요.