Graphics API
Open GL 프로그래밍에 앞서 Graphics API 에 대해 정리하고자 한다.
그래픽 API는 말 그대로 그래픽 작업을 하는데 필요한 주요 기능을 추상화하여 API로 제공해주는 도구를 말한다.
그래픽 어플리케이션을 만든다면 사용자가 이 어플리케이션과 상호작용할 때 결국 키보드도 쓰고 마우스도 쓰고, 컴퓨터는 화면을 그리기 위해 그래픽카드도 사용하고 할텐데, 그런 하드웨어와 프로그램 사이에 정보를 주고받을 수 있는 중간 통로 역할을 하게 된다.
보통 3차원을 그리기 위해서 Graphics API를 사용할텐데, 이때 크게 High Level API 와 Low Level API로 나뉘어진다.
High Level API
프로그래머 친화적인 방식이다.
어떤 그림을 그리기 위한 자세한 과정을 명시하기보다
물체를 정의하고 물체와 물체 사이 관계를 묘사하여 그림을 그리는 과정이다.
(ex- OpenInventor, VRML, Java3D 등)
Low Level API
물체를 구성하는 기본요소(점)의 정의부터 실제 그림을 그리는 세부 과정(무슨 색으로 어떻게 선을 긋고..)을 일일히 명시하여 그림을 그리게 된다. 보다 기계친화적인 방식이라고 할 수 있다.
(ex- OpenGL, Direct3D)
OpenGL 과 OpenGL의 발전
Silicon Graphics의 워크스테이션 API인 GL이 오픈소스인 OpenGL로 발전했다.
Open Inventor: OpenGL을 기반으로 scene graph와 objected-oriented graphics 개념이 추가된 API
VRML : Open Inventor 에서 가상현실 개념을 더한 것
OpenGL ES : OpenGL을 안드로이드, IOS와 같은 임베디드 시스템에서 돌리기 위해 등장
OpenVR : Steam 주도로 오픈소스 VR API
OpenXR : Khronos group 주도로 개발된 XR (AR + VR) 라이브러리 표준
WebGL : 웹 개발용 OpenGL로, OpenGL ES 기반이다.
사실 OpenGL은 API라고 했지만 API보다 규격(specification)에 가까워서 각 함수의 입출력과 기능만을 정의해두었다.
이걸 실제로 어떻게 구현할지는 개발자에게 달려있어서 보통은 그래픽카드 제조사, 애플의 OpenGL은 애플, 리눅스는 그래픽카드 제조사나 동호회 사람들이 라이브러리를 만든다고 한다.
OpenGL 의 버전별 specification 호스팅은 khronos group이 담당한다.
GL의 설계 원리
아래는 GL을 설계할 때 고려한 내용이다.
범용성 : 거의 모든 하드웨어에서 실행할 수 있다.
효율성 : 하드웨어가 지원하지 않는 기능을 비활성화하여 불필요한 자원 소모를 막을 수 있다.
독립성 : 각각의 기능이 최대한 독립적으로 실행되도록 하였다.
완전성 : 하드웨어의 최대 성능을 활용할 수 있도록, 공통 기능외에 하드웨어마다 그 전용 확장 형태의 명령어를 제공한다.
상호작업성 : 그래픽 서버를 두고, 워크스테이션에 있는 GL 프로그램을 클라이언트로 하여 그래픽 처리 명령을 서버가 서비스하도록 할 수 있다.
Core-profile mode
Open GL 2에서는 라이브러리의 기능과 계산이 개발자에게 숨겨진 (추상화된) immediate mode 형식으로 제공되었다. 이 mode는 개발자가 그림을 그리는 코드를 간단히 작성할 수 있었지만, 기술적인 한계 & 효율적이지 못하다는 단점이 있었다.
Open GL 3.2부터는 개발자가 그래픽을 처리할 때 더 많은 권한을 가질 수 있는 core-profile 모드를 갖도록 변경되었다.
비록 배우고 사용하기는 더 어려워졌지만, 그래픽스 파이프라인의 작동 원리를 보다 잘 이해할 수 있게 되었다.
State Machine
Open GL은 State Machine (상태 기계)이다. (현재 어떻게 작동하는지 상태 정보를 변수들로 정의한다.)
Open GL의 상태는 OpenGL Context 라는 이름으로 불린다.
Open GL의 상태 (Context)는 OpenGL의 옵션 설정을 바꿔서 변화시키고, 버퍼를 변경하여 상태를 표현한다.
버퍼를 변경한다는 말의 뜻은 뒤에서 '더블 버퍼링' 개념으로 자세히 나온다.
'CS > HCI 윈도우즈프로그래밍' 카테고리의 다른 글
[OpenGL] 6. Shader (2) - VAO (1) | 2024.04.07 |
---|---|
[OpenGL] 5. Shader (1) - Shader, VBO, Shader Program (0) | 2024.04.05 |
[OpenGL] 4. Graphics Pipeline (1) | 2024.04.04 |
[OpenGL] 3. GLFW 기본 예제 뜯어보기 (0) | 2024.04.04 |
[OpenGL] 1. GLFW, GLAD 환경설정 (2) | 2024.04.03 |