OpenGL

(Vulkan API에서 넘어옴)

Open Graphics Library 홈페이지

1 개요

1992년 초에 컴퓨터 그래픽스의 표준 규격을 기반으로 발표한 2D, 3D 그래픽 라이브러리로 가장 광범위하게 사용되고 있다.현실은 dx

2 상세

OpenGL 이전에는 1980년대 실리콘 그래픽스(SGI) 사에서 개발한 솔루션인 IrisGL이었는데 여러 OS에서 사용할 수 있기 위해 필요한 범용성과 독립성을 고려하지 않고 만들었기 때문에 당시엔 하드웨어 뿐만 아니라 소프트웨어까지 제약이 심했던 솔루션이었다. 그래서 하드웨어와 운영체제에 제약을 받지 않는 API 프로그래밍을 위한 OpenGL이 탄생하게 되었던 것.

초기엔 OpenGL을 첫 번째 주자로 출발하다가 2000년에 비영리 기술 컨소시엄인 크로노스 그룹이 설립되면서 GPGPU 병렬연산용 라이브러리인 OpenCL을 비롯한 다양한 용도의 라이브러리 및 API꾸러미로 확장하고 있는 중.

그래픽쪽을 배울 때에는 꼭 접하게 된다. DirectX라이벌 격. 초창기에는 MS에서도 OpenGL을 지원했었다.[1] 그러다가, 독자솔루션인 DirectX를 내놓으면서 MS는 OpenGL은 전문가 산업용, DirectX는 가정용 컴퓨터 게임 그래픽용이라는 기믹을 만들어 퍼뜨렸는데 존 카멕이 OpenGL이 DirectX보다 훨씬 편리하게 게임에 사용이 가능하다고 직접 코드를 보이면서 글을 올렸고, MS는 존 카멕이 사용하기 힘들다면 다른 누구에게도 힘든게 맞는다며 꼬리를 내렸다. 그러나, 1998년 초 1.2버전 이후 OpenGL은 3년 가까이 개선 과정없이 거듭된 병크를 터뜨렸고[2] DirectX는 1999년 하반기에 발표한 7.0버전에서 크게 발달하여 결국 역전되고 말았다. 존 카멕도 얼마 전 이제는 DirectX가 낫다고 발언한 상황. 저 병크의 원인으로 MS의 음모론을 이야기하는 사람도 있는데, OpenGL 위원회에 MS 측 사람이 껴있긴 했지만 딱 한 명밖에 없어서 가능성은 희박하다. 그리고, 만약 저 한 명으로 인해 저런 병크를 터뜨린 거라면 그건 그냥 OpenGL 쪽이 무능하다는 얘기밖에 안된다.

어쨌건 지금은 OpenGL도 절치부심해서 빠르게 발전하고 있으며, 특히나 모바일 게임시장이 뜨고 MS가 거기서 지지부진한 상황에서 상당한 분발을 보여주고 있다. 과거 하드웨어 T&L 시절에 비하면 트렌드에 뒤쳐지지 않을 정도로 잘 개선되고는 있지만, OpenGL 자체가 게임을 비롯한 멀티미디어만을 위한 존재가 아닌만큼 고려해야할 영역이 많은 API 이다보니 특정 업체인 MS가 본래 Windows 게임을 위해 개발했던 DirectX보다 앞선 기술을 채택하기 어려울 수밖에 없다는 점을 어느 정도 이해해야할 필요가 있다. 90년대 중반까지 DirectX보다 OpenGL이 더 우위였던건 그래픽 API에 있어서 DirectX가 OpenGL보다 3년 늦게 발표된 후발 주자였기 때문에 가능했을 뿐이다.

어지간한 그래픽 카드라면 둘 다 지원하는경우가 많다. DirectX는 사실상 윈도우즈 전용이므로운영체제(OS X, 우분투 등)를 쓴다면 유일한 그래픽 라이브러리이기도 하다. 2010년대 시점에서는 일반인 시각으로 그놈이 그놈이나... Windows Phone을 제외한 모바일 운영체제, 특히 안드로이드)에서는 메이저다.

OpenGL은 크게 GL, GLU로 나눠져 있다. GL은 기본적인 함수들이 구현되어 있고, GLU는 좀 더 편히 사용할 수 있도록 함수가 짜여 있다.

사실 OpenGL을 실제로 화면에 나타내려면 추가로 라이브러리를 사용해야 하는데, 이때 사용하는 것이 GLUT이다.[3] 이 외에도 SDL등과 연동해서 사용하기도 하는데 이는 대부분 크로스플랫폼을 지원한다.

대부분의 3D 그래픽이 그렇지만, OpenGL도 사용하려면 어느 정도 수학과 친해져야 한다. 물론, 기본적인 내용에서는 요구하는 수학이 기초적인 공대수준의 선형대수학과 미분기하학 정도로 그리 높지는 않지만, 컴퓨터 공학과 특성상 저쪽과 별 관련없는 이산수학을 제외하면 대학레벨의 수학을 거의 배우지 않는 경우가 많기도 하고, 특히나 신기술이 추가되면서 요구하는 수학수준도 점점 올라가는 추세이다.

관련 교재와 서적으로는 Red Book과 Blue Book(레퍼런스 매뉴얼), Orange Book, Superbible이 대표적이다.

애플이 매우 사랑하여[4] OS X[5]의 모든 시스템 그래픽은 OpenGL로 가속되어 표시된다[6]. 그러나 WWDC 2014에서 Metal을 새로 공개하면서 iOS용 앱들은 OpenGL에서 자유로워질 것으로 보인다. 한 전문가는 이를 두고 애플이 OpenGL에 강타를 날린 것이라고 비유했다. WWDC 2015에서는 OS X 용의 Metal이 공개되어 OpenGL에 두 번 강타를 날린 꼴. 하지만 과연 강타일지는 두고 봐야 한다. Mac의 점유율이 윈도즈처럼 높지도 않은데 독자 API를 만든다면 유입되는 프로그램의 수가 줄어들 수도 있다. 그리고 OpenGL은 Mac이 쓰든 말든 다른 운영체제에서 대부분 쓰일 정도로 엄청나게 범용성이 높다. 윈도즈, 리눅스, 안드로이드에서 모두 쓰일 수 있다. 애플이 OpenGL을 버린다고 해서 개발자들이 버리는 것은 아니며, 결국 Mac전용 앱이 아니라면 Metal을 쓰는 개발자는 적을 것이다.[7]

2015년 3월, 차세대 OpenGL인 Vulkan이 최초 공개되었다.

3 종류

3.1 OpenGL

최신 버전은 2014년 8월 11일 발표된 4.5 버전이며, DirectX에 주력하는 AMD와는 대조적으로 NVIDIA가 밀고 있는 녀석이다.그런데 왠지 AMD가 더 성능이 잘나온다 [8][9][10]

2.0버전부터 GLSL을 정식으로 지원[11]하기 시작했으며, 3.0버전부터 GLSL을 사용하지 않으면 화면에 폴리곤을 출력할 수 없게 되었다.

교육기관 등에서는 최신버전을 숙지하기 위해서는 구버전부터 개념을 익히는게 중요하다는 명목으로 아직도 1.0버전을 가지고 수업을 하고 있는 경우가 많다. OpenGL 1.0는 폴리곤 연산 등 개념만 익히는 것을 추천하고 실무 개발시에는 OpenGL 1.x 대나 2.x 대를 사용한 개발은 추천하지 않는다.
OpenGL 3.x 부터 많은 개선이 있었으며, 3.3 을 쓸 수 없는 정 여의치 않는 상황이라면 2.0이상을 사용하여 개발 하는것이 추천된다. OpenGL 2.0 부터 GLSL을 사용한 셰이더 작성이 정식으로 가능하기 때문이다.

3.1.1 OpenGL 버전 일람

  • OpenGL 1.0 : 1992년 1월
  • OpenGL 1.1 : 1997년 3월
  • OpenGL 1.2 : 1998년 3월
  • OpenGL 1.2.1 : 1998년 10월
  • OpenGL 1.3 : 2001년 8월
  • OpenGL 1.4 : 2002년 7월
  • OpenGL 1.5 : 2003년 7월
  • OpenGL 2.0 : 2004년 9월 (GLSL 1.1 포함)
  • OpenGL 2.1 : 2006년 7월 (GLSL 1.2 포함)
  • OpenGL 3.0 : 2008년 8월 (GLSL 1.3 포함)
  • OpenGL 3.1 : 2009년 3월 (GLSL 1.4 포함)
  • OpenGL 3.2 : 2009년 8월 (GLSL 1.5 포함)
  • OpenGL 3.3 : 2010년 3월 (GLSL 3.3 포함)
  • OpenGL 4.0 : 2010년 3월 (GLSL 4.0 포함)
  • OpenGL 4.1 : 2010년 7월 (GLSL 4.1 포함)
  • OpenGL 4.2 : 2011년 8월 (GLSL 4.2 포함)
  • OpenGL 4.3 : 2012년 8월 (GLSL 4.3 포함)
  • OpenGL 4.4 : 2013년 7월 (GLSL 4.4 포함)
  • OpenGL 4.5 : 2014년 8월 (GLSL 4.5 포함)

3.2 OpenGL ES

최신 버전은 2015년 8월에 발표한 3.2버전이다. 임베디드 시스템 등에서 사용할 수 있게 몇 가지 잘 사용되지 않는 함수를 제거한 API. 안드로이드 시스템과 iOS에서 그래픽 가속을 위해 사용된다.

OpenGL ES 1.0은 OpenGL 1.3을, OpenGL ES 1.1은 OpenGL 1.5를, OpenGL ES 2.0은 OpenGL 2.0을 베이스로 만들어졌다. 다만, OpenGL ES 2.0은 고정 렌더링 파이프라인을 제거했기 때문에 사실상 OpenGL 3.0과 비슷하게 사용된다. OpenGL ES 3.0은 OpenGL 4.3을 베이스로 만들어졌다.

3.2.1 OpenGL ES 버전 일람

  • OpenGL ES 1.0 : 2003년 7월 (OpenGL 1.3 기반)
  • OpenGL ES 1.1 : 2004년 9월 (OpenGL 1.5 기반)
  • OpenGL ES 2.0 : 2007년 3월 (OpenGL 2.0~3.0 기반)
  • OpenGL ES 3.0 : 2012년 8월 (OpenGL 4.3 기반)
  • OpenGL ES 3.1 : 2014년 3월
  • OpenGL ES 3.2 : 2015년 8월

3.3 Vulkan

2015년 3월 3일에 열린 GDC 2015에서 공식으로 소개된 새 API이다. OpenGL NG, glNext 등으로 불리다가 Vulkan이라는 이름으로 발표되었다. AMD에서 맨틀의 문서를 모두 지원하여 표준으로 제정되고 있으며, OpenGL이 본래 크로스 플랫폼을 타겟으로 삼았던 것과는 다르게 x86-64 기반과 ARM 기반의 태생적인 하드웨어 성능 차이로 인해서 모바일 플랫폼만 OpenGL ES로 분리[12]시켜 사용되었다면, Vulkan은 시대에 맞게 처음부터 PC, 모바일, VR 등 더 다양한 플랫폼들을 모두 대응하는 것이 목표라는 점. 어찌보면 Vulkan이야말로 진정한 크로스 플랫폼의 2D/3D 그래픽 API일지도... 맨틀이나 DirectX 12처럼 하드웨어 직접 접근 3D 그래픽스 API인 만큼 CPU 오버헤드를 줄이는데 일조할 것으로 보인다.

Vulkan에서 사용하는 고수준 셰이더 언어는 OpenGL과 마찬가지로 GLSL이며, GLSL을 SPIR-V로 번역하는 과정을 거친다. SPIR는 Vulkan 런타임 위에서 동작한다. SPIR-V로만 번역하면 셰이더를 사용할 수 있기 때문에 GLSL이 아닌 셰이더 언어도 번역만 SPIR-V로 하면 Vulkan에서 그대로 사용할 수 있을 것으로 보인다.

OpenGL ES 와 Vulkan 의 비교 영상 (좌 : Vulkan, 우 : OpenGL ES)

Vulkan 드라이버 개발에는 AMD, Imagination, Intel, NVIDIA, Qualcomm 이 참여하고 있으며, 데모, 샘플, 엔진 개발에는 ARM, Cinder, Imagination Technology, LunarG, MoltenGL, Norbert Nopper, NVIDIA, Sascha Willems, Unreal Engine 이 참여하고 있다.

그러나 GDC 2015의 Vulkan은 공식으로 처음 소개되었을 뿐, 아직 완성된 버전은 아니었기 때문에 완성된 Vulkan의 공개는 2016년 이후로 예정되었다가 2016년 2월 16일에 Vulkan 1.0이 발표되었다. 발표 직후에 NVIDIA, AMD, intel의 그래픽 지원 베타 드라이버가 각각 발표되었다.

  • NVIDIA Geforce GPU (자세한 사항은 [1] 참조)
    • GeForce TITAN 시리즈
    • GeForce 900 시리즈 이후 모든 모델[13]
    • GeForce 700 시리즈 : GeForce GT 705처럼 페르미 아키텍처를 사용한 제품을 제외한 모든 케플러 아키텍처 기반의 모델
    • GeForce 600 시리즈 : GeForce GTX 690, GeForce GTX 680, GeForce GTX 670, GeForce GTX 660 Ti, GeForce GTX 660, GeForce GTX 650 Ti BOOST, GeForce GTX 650 Ti, GeForce GTX 650, GeForce GTX 645, GeForce GT 645, GeForce GT 640[14], GeForce GT 630[15]
    • Quadro 시리즈(노트북 포함) : 케플러 아키텍처 기반 쿼드로부터 ( Quadro K시리즈 부터)[16]
    • Tegra 시리즈 : NVIDIA Tegra X1, K1 (Jetson TK1 보드는 미지원# 심지어 15년 7월자 드라이버가 마지막으로 업데이트가 끊겼다, Tegra K1 을 탑재한 크롬북은 지원 예정#)
모바일 버전은 아직 베타중이다.
  • 노트북 GPU 지원이 추가되었다
    • GeForce 900M 시리즈 (노트북): 페르미 아키텍처 모델을 제외한 모든 모델.
    • GeForce 800M 시리즈 (노트북): GeForce GTX 880M, GeForce GTX 870M, GeForce GTX 860M, GeForce GTX 850M, GeForce 840M, GeForce 830M
    • GeForce 700M 시리즈 (노트북): GeForce GTX 780M, GeForce GTX 770M, GeForce GTX 765M, GeForce GTX 760M, GeForce GT 755M, GeForce GT 750M, GeForce GT 745M, GeForce GT 740M, GeForce GT 735M, GeForce GT 730M
    • GeForce 600M 시리즈 (노트북): GeForce GTX 680MX, GeForce GTX 680M, GeForce GTX 675MX, GeForce GTX 675M, GeForce GTX 670MX, GeForce GTX 660M, GeForce GT 650M, GeForce GT 645M, GeForce GT 640M, GeForce GT 640M LE #
  • AMD Radeon GPU
    • AMD Radeon™ RX 400 Series graphics
    • AMD Radeon™ Rx 300 Series graphics
    • AMD Radeon™ Rx 200 Series graphics
    • AMD Radeon™ HD 8000 Series graphics for OEM systems (HD 8570 이상)
    • AMD Radeon™ HD 8000M Series graphics for notebooks
    • AMD Radeon™ HD 7000 Series graphics (GCN 아키텍처 기반의 HD 7730 이상)
    • AMD Radeon™ HD 7000M Series graphics for notebooks (HD 7730M 이상)
    • AMD A4/A6/A8/A10-7000 Series APUs (codenamed “Kaveri”)
    • AMD A6/A8/A10 PRO-7000 Series APUs (codenamed “Kaveri”)
    • AMD A6/A8/A10/FX™ 8000 Series APUs (codenamed “Carrizo”)
    • AMD E1/A4/A10 Micro-6000 Series APUs (codenamed “Mullins”)
    • AMD E1/E2/A4/A6/A8-6000 Series APUs (codenamed “Beema”)
    • AMD A4-1200, A4-1300 and A6-1400 Series APUs (codenamed “Temash”)
    • AMD E1-2000, E2-3000, A4-5000, A6-5000, and A4 Pro-3000 Series APUs (codenamed “Kabini”) #
  • 퀄컴 Adreno GPU
    • Adreno 530(스냅드래곤 820), Adreno 430(스냅드래곤 810)[17], Adreno 418(스냅드래곤 808) #


Windows에서 Vulkan API를 사용하기 위해서는 Windows 7 SP1 이상이어야 하며, 이 사이트에서 자신의 기기가 Vulkan API를 지원하는지 확인할 수 있다. 지원 운영체제는 ARM/x86 안드로이드 7.0 누가 이상, 64비트 윈도우, 64비트 리눅스이다. 아직 개발중인 베타 프로그램으로 깃허브에 코드가 공개되어있다.

3.3.1 Vulkan 버전 일람

  • Vulkan 1.0 : 2016년 2월 16일

4 관련 문서

  1. 현재까지도 그래픽카드 도움 없이 소프트웨어 렌더링인 CPU 가속으로는 OpenGL 1.1까지 지원한다.
  2. 사실 병크라고 하기는 뭣 한게 오늘날 기준으로 너무 자주 버전업되어서 쫓아가지 못 하는 개발 업체들의 모습을 보면 맞는 길이다. 하지만, 당시 하드웨어 성능으로 보면 틀린 길이었고 덕분에 점유율를 많이 잃게 되었다.
  3. 해당 라이브러리는 1996년(!) 이후로 업데이트된 적이 없다. OS X는 10.10에서 결국 Deprecated 처리되어 사용시 경고가 뜨게 되었다. OpenGL 공식 위키에서 대안으로 FreeGLUT나 GLFW 등을 추천하고 있으니 관심있는 위키러는 찾아보도록 하자. 디바이스 컨텍스트에 관한 지식을 쌓은 후 WGL이나 GLX 등을 이용해 네이티브하게 구현해버려도 상관은 없지만 그러면 크로스플랫폼과는 영영 이별인지라(...)
  4. 사실 윈도우 이외의 OS 에서는 다른 선택지가 없다. 벌칸이 있긴하지만 아직 제대로 공개되진 않은 상황 그외에 다른것들은... OpenGL에 껍떼기만 바꾼 수준이니
  5. OS X v10.2이후부터
  6. Mac OS X 이후에 등장한 Windows Vista부터, 즉 Aero UI적용 이후부터는 윈도우즈도 그래픽 가속을 하게 되었다. 당연하지만 기반 API는 DirectX
  7. OpenGL로 짠 게임이나 그래픽 툴이 윈도우로 나올 때 상대적으로 Mac과 Linux에 포팅이 쉽다. 근데 아예 API를 바꿔버린다면 포팅될 때 매우 많은 노력이 들어가야 하게 된다. OpenGL로 포팅된 게임에는 WOW같은 게임이 있다.
  8. AMD GPU 일람에서 최신에 속하는 HD 7000번대 시리즈가 OpenGL 4.3까지인데, NVIDIA GPU 일람에서 그다지 최신이라고 할 수 없는 400번대 시리즈가 OpenGL 4.4을 지원한다. 그런데 2014년 4월 26일자에 업뎃된 드라이버로, HD 5000번대 이후의 전 기종이 OpenGL 4.4를 지원하게 됐다. 야 신난다
  9. 꼭 그렇지만도 않은게 1세대 라데온 칩셋에서는 지포스2보다 성능이 낮아도 OpenGL 1.3버전까지 지원해줬고 지포스4가 OpenGL 1.3에 머무는 반면 라데온 9700은 1.4버전까지 지원했기 때문이다. 또한 지포스 시리즈에서는 지포스256이 DirectX 7.0을 최초로 적용되었고 지포스3 시리즈에서는 DirectX 8.0을, 지포스6 시리즈에서는 DirectX 9.0c를, 지포스8 시리즈에서는 10버전을 채택하는 등 한때 DirectX 최신 버전에 일찍 채용한 전례가 있었다. 2015년에 와서는 서로 비교하기엔 옛말이 되었지만..
  10. 그리고 엔비댜가 체급나누기의 이유로 드라이버(또는 하드웨어)단에서 제한을 거는것도 크다. 같은 칩셋을 쓰는 Geforce쿼드로를 비교하면 지원하는 API레벨도, 성능도 차이가 크다. 파이어프로를 관광보내는것도 그렇고
  11. 사실 셰이더 프로그래밍이라는 기능 자체는 1.4버전이 나온 이후 추가로 소개되었지만 부가적인 기능에 머물렀고 1.5버전부터 GLSL로써의 기틀을 마련했으며, 2.0버전에 들어서야 기존 GLSL이 1.1버전으로 개선될 겸 기본 기능으로 승격되면서 핵심적인 기능으로 자리잡게 되었다.
  12. 과거에는 OpenGL 조차 게임용으로 쓰기 복잡해서 게임용으로만 간추려진 MiniGL을 별도로 제공된 적이 있었다. 특정 용도를 위해 불필요한 기능을 제거한 취지만 보면 현재 OpenGL ES와 다를 바 없다.
  13. 이 제품군 이상부터는 기본적으로 지원하므로 따로 모델명을 표기하지 않는다.
  14. 케플러 아키텍처인 GK107, GK208 기반 모델 한정.
  15. 케플러 아키텍처인 GK107, GK208 기반 모델 한정.
  16. Quadro K에서 K는 기반 아키텍처를 명함
  17. Adreno 420(스냅드래곤 805)은 아직 추가되지 않았다.
  18. 4월 16일 펌웨어부터 Vulkan 1.0이 대응되는것으로 확인됨.