OpenGL

**OpenGL**(**Open Graphics Library**, 오픈 그래픽스 라이브러리)는 2D 및 3D 벡터 그래픽스를 렌더링하기 위한 언어 독립적, 크로스 플랫폼 애플리케이션 프로그래밍 인터페이스(API)이다. 이 API는 일반적으로 그래픽 처리 장치(GPU)와 상호작용하여 하드웨어 가속 렌더링을 구현하는 데 사용된다.

실리콘 그래픽스(SGI)는 1991년 OpenGL 개발을 시작하여 1992년 6월 30일에 출시했다. 이는 컴퓨터 지원 설계(CAD), 비디오 게임, 과학적 시각화, 가상 현실 및 비행 시뮬레이터를 포함한 다양한 응용 분야에서 사용된다. 2006년부터 OpenGL은 비영리 단체 기술 연합체인 크로노스 그룹에서 관리하고 있다.

## 설계
섬네일|그래픽스 파이프라인 프로세스에 대한 삽화
OpenGL 사양은 2D 및 3D 그래픽을 그리기 위한 추상적인 애플리케이션 프로그래밍 인터페이스(API)를 기술한다. 이 API는 CPU에서 실행되는 소프트웨어만으로도 구현이 가능하지만, 대부분 또는 전적으로 GPU와 같은 하드웨어 가속을 사용하도록 설계되었다.

API는 클라이언트 프로그램이 호출할 수 있는 일련의 함수와 이름이 지정된 정수 상수(예: 십진법 3553에 해당하는 GL_TEXTURE_2D 상수)의 집합으로 정의된다. 함수 정의는 표면적으로 C 언어와 유사하지만, 언어 독립적이다. 따라서 OpenGL은 많은 언어 바인딩을 가지고 있으며, 가장 주목할 만한 것으로는 웹 브라우저 내에서 3D 렌더링을 하기 위한 자바스크립트 바인딩인 WebGL(OpenGL ES 2.0 기반 API), C 바인딩인 WGL, GLX 및 CGL, iOS에서 제공하는 C 바인딩, 안드로이드에서 제공하는 자바 및 C 바인딩이 있다.

언어 독립적일 뿐만 아니라 OpenGL은 크로스 플랫폼이기도 하다. 사양서에는 OpenGL 컨텍스트를 획득하고 관리하는 주제에 대해 언급하지 않으며, 이를 하부의 윈도 시스템의 세부 사항으로 남겨둔다. 같은 이유로 OpenGL은 오로지 렌더링에만 집중하며 입력, 오디오 또는 윈도잉과 관련된 API는 제공하지 않는다.

### 개발
OpenGL은 더 이상 활발하게 개발되지 않고 있다. 2001년에서 2014년 사이에는 OpenGL 사양이 거의 매년 업데이트되었으며, 2009년에는 두 번(3.1, 3.2), 2010년에는 세 번(3.3, 4.0, 4.1)의 릴리스가 있었다. 최신 OpenGL 사양인 4.6은 3년의 공백기 후인 2017년에 출시되었으며, 11개의 기존 ARB 및 EXT 확장을 코어 프로필에 포함하는 것으로 제한되었다.

OpenGL의 활발한 개발은 2016년에 출시된 벌컨 API(초기 개발 당시 코드명 glNext)를 위해 중단되었다. 2017년 크로노스 그룹은 OpenGL ES의 새로운 버전을 내놓지 않을 것이라고 발표했으며
 그 이후로 벌컨 및 기타 기술 개발에 집중해 왔다. 그 결과 최신 GPU가 제공하는 특정 기능(예: 광선 추적)은 OpenGL 표준에서 지원되지 않는다. 그러나 벤더별 OpenGL 확장을 통해 최신 기능에 대한 지원이 제공될 수 있다.

OpenGL 사양의 새 버전은 크로노스 그룹에 의해 출시되며, 각 버전은 다양한 신기능을 지원하도록 API를 확장한다. 각 버전의 세부 사항은 그래픽 카드 제조업체, 운영 체제 설계자, 그리고 모질라 및 구글과 같은 일반 기술 기업을 포함한 그룹 회원들 간의 합의를 통해 결정된다.

코어 API에서 요구하는 기능 외에도, 그래픽 처리 장치(GPU) 벤더는 확장의 형태로 추가 기능을 제공할 수 있다. 확장은 새로운 함수와 새로운 상수를 도입할 수 있으며, 기존 OpenGL 함수의 제한을 완화하거나 제거할 수 있다. 벤더는 다른 벤더나 크로노스 그룹 전체의 지원 없이도 맞춤형 API를 노출하기 위해 확장을 사용할 수 있으며, 이는 OpenGL의 유연성을 크게 높여준다. 모든 확장은 OpenGL 레지스트리에 수집되고 정의된다.

OpenGL의 각 새 버전에서 도입되는 기능은 일반적으로 널리 구현된 여러 확장, 특히 ARB 또는 EXT 유형의 확장을 결합하여 형성된다.

## 문서
OpenGL Architecture Review Board는 사양과 함께 API의 변경 사항을 추적하기 위해 업데이트된 일련의 매뉴얼을 출시했다. 이들은 흔히 표지의 색상으로 불린다.

;Red Book (레드 북)
:OpenGL Programming Guide, 9th Edition. 
:SPIR-V를 포함한 OpenGL 버전 4.5 학습을 위한 공식 가이드.
;Orange Book (오렌지 북)
:OpenGL Shading Language, 3rd edition. 
:GLSL을 위한 튜토리얼 및 참조 서적.

과거 서적(OpenGL 2.0 이전):

;Green Book (그린 북)
:OpenGL Programming for the X Window System. 
:X11 인터페이스 및 OpenGL 유틸리티 툴킷(GLUT)에 관한 책.
;Blue Book (블루 북)
:OpenGL Reference manual, 4th edition. 
:본질적으로 OpenGL에 대한 Unix manual(man) 페이지의 하드카피 인쇄본.
:이상적인 OpenGL 구현의 구조를 보여주는 포스터 크기의 접이식 다이어그램을 포함한다.
;Alpha Book (알파 북, 흰색 표지)
:OpenGL Programming for Windows 95 and Windows NT. 
:OpenGL을 마이크로소프트 윈도우와 인터페이스하는 것에 관한 책.
OpenGL의 문서는 공식 웹페이지를 통해서도 접근할 수 있다.

## 관련 라이브러리
OpenGL의 초기 버전은 OpenGL Utility Library(GLU)라는 동반 라이브러리와 함께 출시되었다. 이는 테셀레이션, 밉맵 및 기본 도형 생성과 같이 당시 하드웨어에서 지원될 가능성이 낮았던 간단하고 유용한 기능을 제공했다. GLU 사양은 1998년에 마지막으로 업데이트되었으며 현재는 구식이 된 OpenGL 기능에 의존한다.

### 컨텍스트 및 윈도 툴킷
OpenGL 컨텍스트를 생성하는 것이 상당히 복잡한 과정이고 운영체제마다 다르다는 점을 감안할 때, 자동 OpenGL 컨텍스트 생성은 SDL, Allegro, SFML, FLTK, Qt를 포함한 여러 게임 개발 및 사용자 인터페이스 라이브러리의 공통 기능이 되었다. 오로지 OpenGL 기능이 있는 윈도를 생성하기 위해 설계된 몇몇 라이브러리도 있다. 이러한 첫 번째 라이브러리는 OpenGL 유틸리티 툴킷(GLUT)이었으며, 나중에 freeglut로 대체되었다. GLFW는 더 최신의 대안이다.
* 이러한 툴킷은 OpenGL 윈도를 생성 및 관리하고 입력을 관리하도록 설계되었지만, 그 이상의 기능은 거의 없다.
:* GLFW – 크로스 플랫폼 윈도잉 및 키보드-마우스-조이스틱 핸들러이며, 게임 지향적이다.
:* freeglut – 크로스 플랫폼 윈도잉 및 키보드-마우스 핸들러이다. API는 GLUT API의 슈퍼셋이며, GLUT보다 더 안정적이고 최신 상태이다.
:* OpenGL 유틸리티 툴킷(GLUT) – 오래된 윈도잉 핸들러로, 더 이상 유지 관리되지 않는다.
* 여러 "멀티미디어 라이브러리"는 입력, 사운드 및 게임과 같은 응용 프로그램에 유용한 기타 작업 외에도 OpenGL 윈도를 생성할 수 있다.
:* Allegro 5 – 게임 개발에 중점을 둔 C API를 가진 크로스 플랫폼 멀티미디어 라이브러리.
:* 심플 다이렉트미디어 레이어(SDL) – C API를 가진 크로스 플랫폼 멀티미디어 라이브러리.
:* SFML – C++ API와 C#, 자바, 하스켈, Go와 같은 언어에 대한 여러 바인딩을 가진 크로스 플랫폼 멀티미디어 라이브러리.
* 위젯 툴킷
:* FLTK – 작은 크로스 플랫폼 C++ 위젯 라이브러리.
:* Qt – 크로스 플랫폼 C++ 위젯 툴킷. 데스크톱 GL과 OpenGL ES 간의 차이까지 추상화하는 많은 OpenGL 헬퍼 객체를 제공한다.
:* WxWidgets – 크로스 플랫폼 C++ 위젯 툴킷.

### 확장 로딩 라이브러리
OpenGL 확장을 식별하고 로드하는 데 수반되는 과중한 작업량을 감안하여, 사용 가능한 모든 확장과 함수를 자동으로 로드하는 몇몇 라이브러리가 설계되었다. 예로는 OpenGL Easy Extension library(GLEE), OpenGL Extension Wrangler Library(GLEW) 및 glbinding이 있다. 자바 OpenGL, PyOpenGL 및 WebGL과 같은 대부분의 언어 바인딩에 의해서도 확장은 자동으로 로드된다.

### 구현
섬네일|시스템의 OpenGL 메사 구현 정보를 보여주는 <code>glxinfo</code>와 시스템의 OpenGL 구현을 테스트하는 프로그램인 <code>glxgears</code>의 스크린샷
메사 3D는 OpenGL의 오픈 소스 구현체이다. 순수 소프트웨어 렌더링을 할 수 있으며, Direct Rendering Infrastructure를 활용하여 BSD, 리눅스 및 기타 플랫폼에서 하드웨어 가속을 사용할 수도 있다. 버전 20.0 기준으로 OpenGL 표준의 4.6 버전을 구현한다.

## 역사
1980년대에는 크로스 플랫폼 라이브러리 없이 광범위한 그래픽 하드웨어에서 작동할 수 있는 소프트웨어를 개발하는 것이 큰 과제였다. 소프트웨어 개발자들은 각 하드웨어에 대해 맞춤형 인터페이스와 드라이버를 작성했다. 이는 비용이 많이 들었고 노력의 중복을 초래했다.

1990년대 초까지 실리콘 그래픽스(SGI)는 워크스테이션용 3D 그래픽 분야의 선두주자였다. 그들의 IRIS GL API는 사용하기 더 쉽다고 여겨졌고, PHIGS와 같은 경쟁자보다 더 빠른 즉시 모드(immediate mode) 렌더링을 지원했기 때문에 업계 표준이 되었다.

SGI의 경쟁사들(썬 마이크로시스템즈, 휴렛 팩커드 및 IBM 포함) 또한 PHIGS 표준의 확장을 통해 지원되는 3D 하드웨어를 시장에 내놓을 수 있었으며, 이는 SGI가 IRIS GL의 버전을 **OpenGL**이라는 공개 표준으로 오픈 소스화하도록 압박했다.

그러나 SGI에는 IRIS GL에서 OpenGL로의 변경에 상당한 투자가 필요한 많은 고객이 있었다. 게다가 IRIS GL에는 3D 그래픽과 무관한 API 함수들이 있었다. 예를 들어, 윈도 시스템, 키보드 및 마우스 API를 포함하고 있었는데, 이는 부분적으로 X 윈도 시스템과 썬의 NeWS가 개발되기 전에 만들어졌기 때문이다. IRIS GL 라이브러리는 SGI의 독점 그래픽 하드웨어와 밀접하게 연관되어 있었고, 하드웨어 특허와 영업 비밀로 인해 있는 그대로 오픈 소스화할 수 없었다. 이러한 요인들로 인해 SGI는 OpenGL에 대한 시장 지원이 성숙해지는 동안 고급 독점 API인 Iris Inventor와 Iris Performer 프로그래밍 API를 계속 지원해야 했다.

IRIS GL의 제한 사항 중 하나는 하부 하드웨어에서 지원하는 기능에만 접근할 수 있다는 것이었다. 그래픽 하드웨어가 기능을 기본적으로 지원하지 않으면 응용 프로그램은 이를 사용할 수 없었다. OpenGL은 하드웨어에서 지원되지 않는 기능의 소프트웨어 구현을 제공함으로써 이 문제를 극복했고, 상대적으로 저사양 시스템에서도 고급 그래픽을 사용할 수 있게 했다. OpenGL은 하드웨어 접근을 표준화하고, 하드웨어 인터페이스 프로그램(장치 드라이버)의 개발 책임을 하드웨어 제조업체로 밀어냈으며, 윈도잉 기능은 하부 운영 체제에 위임했다. 매우 다양한 종류의 그래픽 하드웨어가 있는 상황에서, 이와 같이 모두가 동일한 언어를 구사하게 만든 것은 소프트웨어 개발자에게 3D 소프트웨어 개발을 위한 상위 레벨의 플랫폼을 제공함으로써 놀라운 영향을 미쳤다.

1992년, SGI는 향후 OpenGL 사양을 유지하고 확장할 기업 그룹인 OpenGL Architecture Review Board(OpenGL ARB)의 창설을 주도했다. 2년 후, 그들은 또한 씬 그래프 API와 같은 요소를 포함하는 "OpenGL++"라는 것을 출시하려는 구상을 하기도 했다(아마도 그들의 Performer 기술에 기반한 것으로 추정됨). 사양은 몇몇 관심 있는 당사자들 사이에서 유포되었으나 제품으로 만들어지지는 않았다.

1996년에 출시된 마이크로소프트의 Direct3D는 결국 OpenGL의 주요 경쟁자가 되었다. 50명 이상의 게임 개발자가 1997년 6월 12일에 공개된 마이크로소프트에 보내는 공개 서한에 서명하여, 회사가 OpenGL을 적극적으로 지원할 것을 촉구했다. 1997년 12월 17일, 마이크로소프트와 SGI는 OpenGL과 Direct3D 인터페이스를 통합하고 씬 그래프 API도 추가하는 것을 목표로 하는 공동 노력인 Fahrenheit 프로젝트를 시작했다. 1998년에는 휴렛 팩커드가 프로젝트에 참여했다. 초기에는 인터랙티브 3D 컴퓨터 그래픽 API 세계에 질서를 가져올 것이라는 기대를 모았으나, SGI의 재정적 제약, 마이크로소프트의 전략적 이유, 그리고 일반적인 업계 지원 부족으로 인해 1999년에 폐기되었다.

2006년 7월, OpenGL Architecture Review Board는 OpenGL API 표준의 관리 권한을 크로노스 그룹으로 이전하기로 결정했다.

### 업계 지원

후속작인 벌컨이나 메탈과 같은 최신 그래픽 API의 출현에도 불구하고, OpenGL은 여전히 널리 사용되는 표준으로 남아 있다. 이러한 지속적인 관련성은 새로운 확장 및 드라이버 최적화를 통한 지속적인 개발, 크로스 플랫폼 호환성, 그리고 ANGLE 및 Zink와 같은 호환성 계층의 가용성이라는 여러 요인에 의해 뒷받침된다. 이러한 계층을 통해 OpenGL은 벌컨 및 메탈 위에서 효율적으로 실행될 수 있으며, 개발자들에게 지속적인 사용 또는 점진적인 전환을 위한 경로를 제공한다.

그러나 그래픽 API 환경은 변화하고 있으며, 일부 기업들은 OpenGL에서 멀어지고 있다. 2018년 6월, 애플은 자신들의 모든 플랫폼(iOS, MacOS 및 TvOS)에서 OpenGL API를 지원 중단했으며, 개발자들에게 2014년에 도입된 자신들의 독점 메탈 API를 사용할 것을 강력히 권장하고 있다.

게임 개발자들도 최신 API를 채택하기 시작했다. 1990년대 후반부터 GLQuake나 둠 시리즈의 일부 게임에서 OpenGL을 사용해 온 이드 소프트웨어는 2016년 이드 테크 7 엔진에서 후속작인 벌컨으로 전환했다. 그들은 이드 테크 6 엔진의 업데이트에서 처음으로 벌컨을 지원했다. 이 회사가 OpenGL을 처음으로 라이선스하여 사용한 것은 이드 테크 2로도 알려진 Quake II engine에서였다. 2023년 3월, 밸브 코퍼레이션은 벌컨을 위해 도타 2에서 OpenGL 지원을 제거했다. Atypical Games는 삼성의 지원을 받아 애플 이외의 모든 플랫폼에서 OpenGL 대신 벌컨을 사용하도록 게임 엔진을 업데이트했다.

OpenGL 개발을 책임지는 컨소시엄인 크로노스 그룹은 OpenGL에 대한 지원 제공을 중단했다. OpenGL은 하드웨어 가속 광선 추적, GPU 기반 비디오 디코딩, 그리고 엔비디아 DLSS 및 AMD FSR와 같은 고급 안티앨리어싱 알고리즘과 같은 여러 현대적 그래픽 기술을 도입받지 못했다.

구글의 퓨시아 OS는 벌컨을 기본으로 사용하고 벌컨 준수 GPU를 요구하지만, 여전히 ANGLE 변환 계층을 통해 벌컨 위에서 OpenGL을 지원할 계획이다.

## 버전 역사
OpenGL의 첫 번째 버전인 버전 1.0은 1992년 6월 30일에 마크 시걸과 커트 애클리에 의해 출시되었다. 그 이후로 OpenGL은 가끔 사양의 새 버전을 출시함으로써 확장되어 왔다. 이러한 릴리스는 모든 준수 그래픽 카드가 지원해야 하는 기준 기능 세트를 정의하며, 이를 바탕으로 새로운 확장을 더 쉽게 작성할 수 있다. OpenGL의 각 새 버전은 그래픽 카드 벤더들 사이에서 널리 지원되는 여러 확장을 통합하는 경향이 있지만, 해당 확장의 세부 사항은 변경될 수 있다.

### OpenGL 2.0
출시일: 2004년 9월 7일

OpenGL 2.0은 원래 3D랩스가 OpenGL이 정체되고 강력한 방향성이 부족하다는 우려를 해결하기 위해 구상했다. 3D랩스는 표준에 대한 다수의 대규모 추가 사항을 제안했다. 당시 이들 대부분은 ARB에 의해 거부되었거나 3D랩스가 제안한 형태로 결실을 맺지 못했다. 그러나 C 스타일 셰이딩 언어에 대한 그들의 제안은 결국 완성되어 현재의 GLSL(GLslang)이 탄생하게 되었다. 이전의 어셈블리 형태의 셰이딩 언어처럼, 고정 함수 정점 및 프래그먼트 파이프를 셰이더로 대체할 수 있게 했으며, 이번에는 C와 유사한 고급 언어로 작성할 수 있게 되었다.

GLSL의 설계는 당시 사용 가능한 하드웨어의 한계에 대해 상대적으로 적은 타협을 한 것으로 유명했다. 이는 단순히 현재 사용 가능한 하드웨어 상태를 추적하기보다는 3D 가속기에 대해 야심 차고 미래 지향적인 목표를 설정하는 OpenGL의 초기 전통을 계승한 것이었다. 최종 OpenGL 2.0 사양은 GLSL 1.10에 대한 지원을 포함한다.

### OpenGL 2.1
출시일: 2006년 7월 2일

OpenGL 2.1은 픽셀 버퍼 객체, sRGB 텍스처 및 GLSL 1.20에 대한 지원을 추가했다.

### 롱스피크 및 OpenGL 3.0
OpenGL 3.0 출시 전, 새로운 리비전의 코드명은 롱스피크였다. 원래 발표 당시 롱스피크는 OpenGL 역사상 첫 번째 주요 API 리비전으로 제시되었다. 이는 OpenGL의 작동 방식을 전면 개편하고 API에 근본적인 변화를 요구하는 것으로 구성되었다.

초안에서는 객체 관리에 대한 변경 사항이 도입되었다. GL 2.1 객체 모델은 OpenGL의 상태 기반 설계를 기반으로 구축되었다. 즉, 객체를 수정하거나 사용하려면 객체를 상태 시스템에 바인딩한 다음 상태를 수정하거나 바인딩된 객체를 사용하는 함수 호출을 수행해야 한다.

OpenGL이 상태 시스템을 사용하기 때문에 객체는 가변적(mutable)이어야 한다. 즉, 렌더링 파이프라인이 비동기적으로 해당 객체를 사용하고 있더라도 객체의 기본 구조가 언제든지 변경될 수 있다. 텍스처 객체는 2D에서 3D로 재정의될 수 있다. 이로 인해 모든 OpenGL 구현은 내부 객체 관리에 복잡성을 추가해야 한다.

롱스피크 API 하에서 객체 생성은 원자적이 되며, 템플릿을 사용하여 한 번의 함수 호출로 생성될 객체의 속성을 정의한다. 그런 다음 객체는 여러 스레드에서 즉시 사용될 수 있다. 객체는 또한 불변(immutable)이 되지만, 그 내용은 변경 및 업데이트될 수 있다. 예를 들어, 텍스처는 이미지를 변경할 수 있지만 크기와 형식은 변경할 수 없다.

이전 버전과의 호환성을 지원하기 위해 기존의 상태 기반 API도 계속 사용할 수 있지만, 이후 버전의 OpenGL에서는 기존 API를 통해 새로운 기능이 노출되지 않는다. 이를 통해 대부분의 CAD 제품과 같은 레거시 코드베이스를 계속 실행하는 동시에 다른 소프트웨어는 새로운 API를 기반으로 작성하거나 이식할 수 있게 할 예정이었다.

롱스피크는 원래 2007년 9월에 OpenGL 3.0이라는 이름으로 확정될 예정이었으나, 크로노스 그룹은 10월 30일에 사양을 출시하기 전에 해결하고자 하는 몇 가지 문제가 발생했다고 발표했다. 그 결과 사양 공개가 지연되었고, 크로노스 그룹은 최종 OpenGL 3.0 사양이 출시될 때까지 언론통제에 들어갔다.

최종 사양은 롱스피크 제안보다 훨씬 덜 혁신적인 것으로 밝혀졌다. 모든 즉시 모드 및 고정 기능(비셰이더 모드)을 제거하는 대신, 사양에는 이들을 구식(deprecated) 기능으로 포함했다. 제안된 객체 모델은 포함되지 않았으며, 향후 리비전에 이를 포함할 계획도 발표되지 않았다. 결과적으로 API는 기존의 몇몇 확장이 코어 기능으로 승격된 것 외에는 대체로 동일하게 유지되었다. 일부 개발자 그룹 사이에서 이 결정은 큰 소동을 일으켰으며, 많은 개발자가 항의의 의미로 DirectX로 전환하겠다고 공언했다. 대부분의 불만은 크로노스가 개발자 커뮤니티와 소통이 부족했다는 점과 많은 이들이 긍정적으로 보았던 여러 기능이 폐기되었다는 점에 집중되었다. 다른 불만 사항으로는 OpenGL 3.0을 사용하기 위해 DirectX 10 수준의 하드웨어가 필요하다는 점과 기하 셰이더 및 인스턴스 렌더링이 코어 기능에서 빠졌다는 점 등이 있었다.

다른 소식통들은 커뮤니티의 반응이 원래 제시된 것만큼 심각하지는 않았으며, 많은 벤더가 업데이트에 대한 지지를 표명했다고 보고했다.

### OpenGL 3.0
출시일: 2008년 8월 11일

OpenGL 3.0은 API의 향후 리비전을 단순화하기 위해 구식화(deprecation) 메커니즘을 도입했다. 구식으로 표시된 특정 기능은 윈도 시스템에서 전방 호환(forward-compatible) 컨텍스트를 요청함으로써 완전히 비활성화할 수 있다. 하지만 전체(full) 컨텍스트를 요청하면 이러한 구식 기능과 함께 OpenGL 3.0 기능을 계속 사용할 수 있다.

구식 기능은 다음과 같다:
* 모든 고정 기능 정점 및 프래그먼트 처리
* glBegin 및 glEnd를 사용하는 직접 모드(direct-mode) 렌더링
* 디스플레이 리스트
* 인덱스 컬러 렌더링 타겟
* OpenGL Shading Language 버전 1.30

하드웨어 지원: 엔비디아 지포스 8 시리즈 이상, ATI 라데온 HD 2000 시리즈 이상, 인텔 샌디브리지 프로세서의 인텔 HD 그래픽 이상.

### OpenGL 3.1
출시일: 2009년 3월 24일

OpenGL 3.1은 굵은 선(wide lines)을 제외하고 버전 3.0에서 구식으로 지정된 모든 기능을 완전히 제거했다. 이 버전부터는 전체 컨텍스트를 사용하여 새로운 기능에 접근하거나, 전방 호환 컨텍스트를 사용하여 구식 기능에 접근하는 것이 불가능하다. 구현체가 ARB_compatibility 확장을 지원하는 경우 전자의 규칙에 예외가 인정되지만, 이는 보장되지 않는다. GLSL 1.40에 대한 지원이 포함된다.

하드웨어 지원: 메사는 버전 21.0부터 ARM Panfrost를 지원한다.

### OpenGL 3.2
출시일: 2009년 8월 3일

OpenGL 3.2는 사양을 코어 프로필(core profile)과 호환성 프로필(compatibility profile)로 나눔으로써 OpenGL 3.0에서 도입된 구식화 메커니즘을 더욱 발전시켰다. 호환성 컨텍스트에는 이전에 제거된 고정 기능 API(OpenGL 3.1과 함께 출시된 ARB_compatibility 확장과 동일)가 포함되지만, 코어 컨텍스트에는 포함되지 않는다. OpenGL 3.2에는 GLSL 버전 1.50으로의 업그레이드도 포함되었다.

### OpenGL 3.3
출시일: 2010년 3월 11일

OpenGL 3.3은 구형 하드웨어에 대한 지원을 유지하면서 OpenGL 4.0의 기능을 최대한 많이 유지하는 것을 목표로 소소한 추가 사항들을 포함했다. 추가된 사항으로는 새로운 블렌딩 함수, 샘플러 객체 및 새로운 텍스처와 정점 포맷이 있다. 또한 GLSL 버전 3.30에 대한 지원이 추가되어, 이제 메이저 및 마이너 버전이 OpenGL과 일치하게 되었다.

### OpenGL 4.0
출시일: 2010년 3월 11일

OpenGL 4.0은 버전 3.3과 함께 출시되었다. 이는 Direct3D 11을 지원할 수 있는 하드웨어를 위해 설계되었다.

OpenGL 3.0에서와 마찬가지로, 이 버전의 OpenGL은 테셀레이션과 같은 Direct3D 11급 하드웨어의 능력을 철저하게 노출하도록 설계된 많은 수의 미세한 확장들을 포함하고 있다.

하드웨어 지원: 엔비디아 지포스 400 시리즈 이상, AMD 라데온 HD 5000 시리즈 이상(일부 TeraScale GPU에서 에뮬레이션으로 구현된 FP64 셰이더), 인텔 아이비브리지 프로세서의 인텔 HD 그래픽 이상.

### OpenGL 4.1
출시일: 2010년 7월 26일

* 이 사양을 구현하는 GPU의 경우 최소 "최대 텍스처 크기"는 16,384 × 16,384이다.
* OpenGL ES 2.0과의 호환성 개선
* 동일한 렌더링 표면에 대해 여러 개의 뷰포트를 사용하거나 표면당 하나를 사용함.

하드웨어 지원: 엔비디아 지포스 400 시리즈 이상, AMD 라데온 HD 5000 시리즈 이상(일부 TeraScale GPU에서 에뮬레이션으로 구현된 FP64 셰이더), 인텔 하스웰 프로세서의 인텔 HD 그래픽 이상 (리눅스 메사: 아이비브리지 이상). 또한 이는 애플 macOS에서 지원하는 마지막 코어 프로필이다.

### OpenGL 4.2
출시일: 2011년 8월 8일
* 원자적 카운터를 가진 셰이더 및 텍스처의 한 레벨에 대한 load-store-atomic read-modify-write 작업 지원
* GPU 정점 처리(테셀레이션 포함)에서 캡처된 데이터의 다중 인스턴스를 그려 복잡한 객체를 효율적으로 재배치하고 복제할 수 있게 함
* 텍스처 전체를 GPU로 다시 다운로드할 필요 없이 압축된 텍스처의 임의의 서브셋 수정을 지원하여 상당한 성능 향상

하드웨어 지원: 엔비디아 지포스 400 시리즈 이상, AMD 라데온 HD 5000 시리즈 이상(일부 TeraScale GPU에서 에뮬레이션으로 구현된 FP64 셰이더), 그리고 인텔 하스웰 프로세서의 인텔 HD 그래픽 이상. (리눅스 메사: 아이비브리지 이상)

### OpenGL 4.3
출시일: 2012년 8월 6일
* 그래픽 파이프라인 컨텍스트 내에서 GPU 병렬성을 활용하는 컴퓨트 셰이더
* 셰이더 스토리지 버퍼 객체: 셰이더가 4.2의 이미지 load/store와 같은 버퍼 객체를 함수 호출이 아닌 언어 자체를 통해 읽고 쓸 수 있게 함
* 이미지 형식 파라미터 쿼리
* ETC2/EAC 텍스처 압축을 표준 기능으로 포함
* OpenGL ES 3.0 API와 완전한 호환성
* 응용 프로그램 개발 중 디버깅 메시지를 수신할 수 있는 디버그 능력
* 데이터 복제 없이 텍스처를 다른 방식으로 해석할 수 있는 텍스처 뷰
* 메모리 보안 강화 및 멀티 애플리케이션 견고성

하드웨어 지원: AMD 라데온 HD 5000 시리즈 이상(일부 TeraScale GPU에서 에뮬레이션으로 구현된 FP64 셰이더), 인텔 하스웰 프로세서의 인텔 HD 그래픽 이상. (리눅스 메사: 스텐실 텍스처링이 없는 아이비브리지, 하스웰 이상), 엔비디아 지포스 400 시리즈 이상. 가상 머신용 VIRGL 에뮬레이션은 메사 20부터 4.3 이상을 지원한다.

### OpenGL 4.4
출시일: 2013년 7월 22일
* 강화된 버퍼 객체 사용 제어
* 버퍼 객체에 대한 비동기 쿼리
* 셰이더 내 인터페이스 변수의 더 많은 레이아웃 제어 표현
* 여러 객체를 동시에 효율적으로 바인딩

하드웨어 지원: AMD 라데온 HD 5000 시리즈 이상(일부 TeraScale GPU에서 에뮬레이션으로 구현된 FP64 셰이더), 인텔 브로드웰 프로세서의 인텔 HD 그래픽 이상 (리눅스 메사: 하스웰 이상), 엔비디아 지포스 400 시리즈 이상, 테그라 K1.

### OpenGL 4.5
출시일: 2014년 8월 11일
* Direct State Access (DSA) – 객체를 컨텍스트에 바인딩하지 않고도 상태를 조회하고 수정할 수 있는 객체 접근자를 통해 응용 프로그램 및 미들웨어의 효율성과 유연성을 높임.
* Flush Control – 응용 프로그램이 컨텍스트 전환 전에 보류 중인 명령의 플러싱을 제어할 수 있어 고성능 멀티스레드 응용 프로그램을 가능하게 함.
* Robustness(견고성) – WebGL 브라우저와 같은 응용 프로그램을 위해 GPU 리셋이 실행 중인 다른 응용 프로그램에 영향을 주지 않도록 방지하는 등 안전한 플랫폼 제공.
* OpenGL ES 3.1 API 및 셰이더 호환성 – 데스크톱 시스템에서 최신 OpenGL ES 응용 프로그램을 쉽게 개발하고 실행할 수 있도록 함.

하드웨어 지원: AMD 라데온 HD 5000 시리즈 이상(일부 TeraScale GPU에서 에뮬레이션으로 구현된 FP64 셰이더), 인텔 브로드웰 프로세서의 인텔 HD 그래픽 이상 (리눅스 메사: 하스웰 이상), 엔비디아 지포스 400 시리즈 이상, 테그라 K1 및 테그라 X1.

### OpenGL 4.6
출시일: 2017년 7월 31일
* 더 효율적인 GPU 측의 기하 처리
* 더 효율적인 셰이더 실행 ()
* 통계, 오버플로 쿼리 및 카운터를 통한 더 많은 정보 제공
* 에러 처리 컨텍스트가 없어 더 높은 성능 구현
* 폴리곤 오프셋 함수의 클램핑, 그림자 렌더링 문제 해결
* SPIR-V 셰이더
* 향상된 비등방성 필터링

하드웨어 지원: AMD 라데온 HD 7000 시리즈 이상(일부 TeraScale GPU에서 에뮬레이션으로 구현된 FP64 셰이더), 인텔 스카이레이크 이상, 엔비디아 지포스 400 시리즈 이상.

드라이버 지원:
* 리눅스의 메사 19.2는 인텔 브로드웰 이상의 제품에 대해 OpenGL 4.6을 지원한다. 메사 20.0은 AMD 라데온 GPU를 지원하며, 엔비디아 케플러 이상에 대한 지원은 진행 중이다. 21.1 버전부터 에뮬레이션 드라이버인 Zink와 소프트웨어 드라이버 LLVMpipe 또한 메사 21.0과 함께 지원한다.
* 윈도우 7 SP1, 윈도우 10 버전 1803(2018년 4월 업데이트)의 AMD Adrenalin 18.4.1 그래픽 드라이버가 AMD 라데온 HD 7700+, HD 8500+ 이상 제품에 대해 지원한다. 2018년 4월 출시.
* 윈도우 10의 인텔 26.20.100.6861 그래픽 드라이버. 2019년 May 출시.
* 엔비디아 지포스 397.31 그래픽 드라이버. 윈도우 7, 8, 윈도우 10 X86-64 비트만 지원하며 32비트 지원은 없다. 2018년 4월 출시.

## 대안 구현체
애플은 iOS 12와 macOS 10.14 모하비에서 메탈을 위해 OpenGL을 지원 중단했으나, 애플 실리콘 기기를 포함하여 macOS 14 소노마 시점까지 여전히 사용 가능하다. 지원되는 마지막 OpenGL 버전은 2011년의 4.1이다. MoltenVK의 제작자인 Molten의 독점 라이브러리인 MoltenGL은 OpenGL 호출을 메탈로 변환할 수 있다.

벌컨 위에서 OpenGL을 구현하려는 여러 프로젝트가 있다. 구글의 ANGLE 벌컨 백엔드는 2020년 7월에 OpenGL ES 3.1 준수를 달성했다. 메사 3D 프로젝트 또한 Zink라고 불리는 드라이버를 포함하고 있다.

마이크로소프트의 Arm용 윈도우 11은 메사 갈륨(Mesa Gallium)을 통해 DirectX 12 위에서 돌아가는 오픈 소스 OpenGL 구현체인 GLon12를 통해 OpenGL 3.3 지원을 추가했다.

## 벌컨

이전에는 "차세대 OpenGL 이니셔티브"(glNext)로 명명되었던 벌컨은 기존 OpenGL 버전과 하위 호환되지 않는 하나의 공통 API로 OpenGL과 OpenGL ES를 통합하려는 전면적인 재설계 노력이다.

벌컨 API의 초기 버전은 2016년 2월 16일에 출시되었다.

## 같이 보기
* GLSL - OpenGL의 상위 레벨 셰이딩 언어.
* 글라이드 - 부두 그래픽 가속 카드를 위한 3D 그래픽스 API.
* OpenGL ES - 임베디드 단말을 위한 OpenGL.

### OpenGL 지원 라이브러리
* GLUT – OpenGL 유틸리티 툴킷으로 윈도 시스템에 독립적인 OpenGL 프로그램을 작성하도록 도와주는 도구.
* SDL – Simple DirectMedia Layer.
* GLU – OpenGL 프로그램을 위한 추가적인 함수를 제공.
* GLee - OpenGL 프로그램을 위한 단순한 추가 라이브러리 제공.
* GLEW – OpenGL 확장 Wrangler 라이브러리 제공.
* GLUI - GLUT로 만들어진 GUI 툴킷으로 버튼, 체크박스 등의 GUI 기능을 제공.
* GLFW - OpenGL 응용 프로그램 개발을 위한 이식 가능한 프레임워크.
* GLM - GLSL 규격에 기반한 OpenGL을 위한 C++ 수학 툴킷.
* SFML - 간단하고 빠른 멀티미디어 라이브러리.
* Glux - OpenGL 유틸리티 및 보조 라이브러리.

### 기타 3D 그래픽스 API
* Mesa 3D - OpenGL의 공개소스 판.
* VirtualGL - 원격지 X 서버로 렌더링된 이미지를 보내주는 OpenGL 3D 모델 서버.
* Direct3D - 마이크로소프트사에서 개발한 OpenGL의 대항 API.
* RISpec - 픽사에서 개발한 실사 오프라인 렌더링을 위한 공개 API.

### 기타 2D 그래픽스 API
* 카이로 - 여러 운영체제에서 사용할 수 있는 벡터 그래픽 툴킷.
* GTK+ - 여러 운영체제에서 사용할 수 있는 그래픽 위젯 툴킷.
* Qt - 여러 운영체제에서 사용할 수 있는 그래픽 위젯 툴킷.
* wxWidgets - 여러 운영체제에서 사용할 수 있는 그래픽 위젯 툴킷.

## 각주

; 내용주


## 외부 링크

* 
* OpenGL Overview and OpenGL.org's Wiki with more information on OpenGL Language bindings
* SGI's OpenGL website
* Khronos Group, Inc.


분류:그래픽 라이브러리
분류:3차원 그래픽스 API
분류:API
분류:1992년 소프트웨어