OpenGL 시리즈 링크

OPENGL 소개: OPENGL, GLFW, GLEW란? [OPENGL E02]
OPENGL 설치: GLEW, GLFW 다운로드법과 VISUAL STUDIO에서 OPENGL 사용하기 [OPENGL E03]
OPENGL 창 만들기: OPENGL 기초 세팅[OPENGL E04]
OPENGL 삼각형 그리기 (1)VBO, VAO [OPENGL E05]
OPENGL 삼각형 그리기 (1)-2 코드 중간 정리 [OPENGL E06]
OPENGL 삼각형 그리기 (2)VERTEX SHADER, FRAGMENT SHADER의 기초 [OPENGL E07]
OPENGL 삼각형 그리기 (3)SHADER PROGRAM [OPENGL E08]

OpenGL이란?

OpenGL이 정확히 무엇인지 알아보자.

OpenGL을 라이브러리라고 생각했습니다. 하지만 OpenGL은 설명서(Specification)와 같은 것입니다. 즉, 함수의 이름, 기능, 인자, 작동 방식 등이 설명된 API 규격입니다. OpenGL API 규격을 직접 확인하실 수 도 있습니다.

API(Application Programming Interface)란 운영 프로그램에서 사용할 수 있도록 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만드는 인터페이스입니다. API와 라이브러리의 차이점을 더 알고 싶으시다면 API vs Library vs Framework 영상을 참고해주세요!

그렇다면 OpenGL API 규격에 작성된 내용을 누가 구현할까요?
바로 그래픽 처리 장치(GPU) 제조업체입니다. 당연히 그래픽 처리 장치 제조업체는 엔비디아, AMD, 인텔 등 여러 곳이 있으며, 따라서 OpenGL의 구현도 하나가 아닙니다. 이렇게 구현된 OpenGL은 드라이버와 함께 그래픽 카드에 탑재됩니다.

이렇게 작성된 코드들의 집합을 우리는 라이브러리처럼 사용하게 됩니다.

  • OpenGL은 API 규격으로 라이브러리가 아닌 문서이다.
  • OpenGL은 그래픽 처리 장치 제조업체에서 구현하여 그래픽 카드에 드라이버와 함께 제공한다.
  • 우리는 이 구현된 코드들을 라이브러리처럼 가져다 사용한다.

GPU vs Graphics Card

그래픽 처리 장치(GPU)와 그래픽 카드(Graphics Card)는 다릅니다.
그래픽 처리 장치는 말 그대로 그래픽 연산을 처리하는 연산 장치입니다.
그래픽 카드는 GPU, VRAM 등 그래픽 연산과 처리, 송출에 필요한 모든 기능을 한 데 모아둔 장치입니다.
예전에는 그래픽 처리 장치와 그래픽 카드를 한 회사가 모두 제조하기도 하였습니다.
하지만 요즘은 그래픽 처리 장치를 전문적으로 설계하는 엔비디아, AMD, 인텔 등의 회사가 존재하고
이를 바탕으로 그래픽 카드를 제조하는 ASUS, GIGABYTE 등의 회사가 따로 존재합니다.

GLFW(Graphics Library Framework)란?

GLFW란 무엇인지 알아보자.

GLFW(Graphics Library Framework)는 OpenGL과 함께 쓰는 유틸리티 라이브러리입니다. OpenGL 유틸리티 라이브러리는 GLFW 외에도 GLUT, FreeGLUT, GLU 등 다양하게 있습니다. 하지만 GLUT와 GLU는 1998년 이후로 업데이트 되지 않았습니다. GLUT를 대체하기 위해 오픈 소스로 작성된 FreeGLUT은 블로그 작성 날짜 기준 2019년 9월에 3.2.1 버전을 릴리스했습니다. 비교적 지속적인 업데이트가 진행되고 있다고 볼 수 있습니다. GLFW는 블로그 작성 날짜 기준 2021년 2월에 3.3.3 버전을 릴리스했습니다. 가장 활발히 업데이트 하고 있는 유틸리티 라이브러리입니다.

유틸리티 라이브러리 중 GLFW와 함께 가장 많이 쓰이는 라이브러리는 SDL/SDL2입니다. SDL/SDL2는 GLFW보다 더 광범위한 유틸리티를 제공하는 멀티미디어 라이브러리로 창 제어 뿐만 아니라 오디오 관리, 텍스트 삽입 등이 가능하기 때문에 혹시나 OpenGL로 게임을 만들고 싶으시다면 SDL/SDL2를 사용하시는 것을 추천합니다. 여기선 GLFW를 사용하도록 하겠습니다. 유틸리티 라이브러리가 필요한 이유는 OpenGL이 그래픽스 API일 뿐 창을 생성하거나, 키 입력을 받는 등의 기능은 제공하지 않기 때문입니다. GLFW는 창을 생성, 제어할 수 있게 해주고, OpenGL context를 생성 및 관리할 수 있게 해줍니다. 더불어, 키 입력과 이벤트 생성 등도 할 수 있게 해줍니다.

  • GLFW는 가장 활발히 업데이트되고 있는 유틸리티 라이브러리이다.
  • 창 생성, OpenGL context 생성 및 관리, 키 입력 관리, 이벤트 생성 등을 담당한다.

GLEW(OpenGL Extension Wrangler)란?

GLEW란 무엇인지 알아보자.

GLEW(OpenGL Extension Wrangler)는 OpenGL 확장을 쿼리하고 로드하는 크로스플랫폼 라이브러리입니다.

OpenGL은 사용하기 편리한 라이브러리로 딱 구현되어 있지 않습니다. 게다가, 구현된 함수들의 함수 포인터를 불러오는 또 다른 함수들을 호출하여 사용해야하는 등 사용이 쉽지 않습니다. 더불어, 예컨대 OpenGL을 Windows 환경에서 사용할 때 opengl32.h 따위의 헤더 파일을 추가하는데, 이 헤더 파일은 Windows에서 만든 파일로 Windows 환경에 맞춰줘있을 뿐만 아니라, OpenGL 1.x 버전 이후로 업데이트 되지 않았습니다. 따라서 복잡한 OpenGL의 기본 + 확장 기능까지 사용하기 위해 필요한 라이브러리가 확장 라이브러리 GLEW입니다.

OpenGL의 최신 구현은 그래픽 카드에 탑재되어 있습니다. GLEW는 그래픽 카드 드라이버의 DLL(동적 라이브러리)에 탑재되어 있는 OpenGL 함수들의 포인터들을 불러와 자체적으로 정의한 OpenGL 함수들과 연결합니다. 즉, 우리는 OpenGL 함수들을 GLEW를 통하여 사용하게 됩니다.

  • GLEW는 플랫폼 마다 사용 방법이 다르고 복잡한 OpenGL을 손쉽게 사용할 수 있게 해주는 확장 라이브러리이다.
  • GLEW를 사용하면 최신 OpenGL의 기본 + 확장 기능까지 사용할 수 있다.