[GPU프로그래밍] 2. Getting Started with GLSL

jungizz_·2024년 4월 14일
0

GPU Programming

목록 보기
2/15
post-thumbnail

⚫ Compatibility (호환성)

  • OpenGL 3.0에서는 버전이 업그레이드됨에 따라 더 이상 사용되지 않는 함수들을 점진적으로 제거하는 deprecation구식화 model을 도입
    • 다음 버전에 사라질 함수를 미리 표시해둬서 개발자들이 지양하도록
  • 호환성과 관련하여 고려해야할 사항 (프로파일 선택)
    • Comparibility profile: 이전 기능과의 호환성 유지
    • Core profile: 특정 버전의 OpenGL을 위해 코드 작성, 이전 버전 기능을 사용하지 않는 경우
// 버전 설정 및 프로파일 선택
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); 
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

⚫ OpenGL Library

1. GLFW

  • OpenGL context를 생성하여 렌더링할 window 생성, 입력 이벤트 처리 등 OpenGL 애플리케이션의 귀찮은 구현들을 쉽게 해주는 라이브러리
  1. GLFW 다운 (헤더파일, 라이브러리파일)
    • 미리 컴파일 되어있는 상태
  2. include directory에 GLFW 라이브러리 헤더파일 추가
  3. 라이브러리 파일(glfw3.lib)을 링크
  • 이러한 기능이 OpenGL에 포함 안되있는 이유: 보통 OS, 시스템과 관련된 기능이라 독립적으로 구현하기 위해 분리

2. GLAD

  • OpenGL의 최신 기능에 액세스하기 위해 사용되는 라이브러리 로더
  • OpenGL은 다양한 버전의 드라이버를 가짐
    • 대부분의 함수의 위치는 compile-time에는 몰라서 run-time에 쿼리되야함
    • 즉, run-time에 필요한 함수를 찾아 연결(Linking)해주는 작업을 간단하게 해줌
  1. GLAD 사이트에서 Language, OpenGL Version, Profile을 선택하여 환경에 맞는 라이브러리 다운
  2. include directory에 생성된 GLAD 라이브러리 파일 추가
  3. glad.c파일을 프로젝트에 추가
  4. 소스코드 #include <glad/glad.h>를 추가하여 같이 빌드되도록 함

3. GLM

  • OpenGL Mathematics
  • Pre-made mathematics libraries
  • Header-only library
  1. GLM 다운
  2. include directory에 GLM 라이브러리 추가
  3. 필요한 기능만 include (내용이 많아서)
#include <glm/glm.hpp>               // 기본적인 GLM 기능
#include <glm/gtc/matrix_transform.hpp> // 행렬 변환
#include <glm/gtc/type_ptr.hpp>      // 포인터 형식 변환
  • GLM의 클래스와 함수는 모두 glm namespace에 정의되어 있으므로, 이를 사용하여 필요한 클래스, 함수에 접근할 수 있음

📃 example code (p.8-9)

📃 Hello Window (p.10-13)

  • Callback은 또 다른 함수 호출 방법으로, 조건이 맞을 때 호출한다 (ex-화면 크기 바뀔 떄, 마우스 클릭 할 때...)

⚫ Shader Program

  • 쉐이더는 실행 중인 OpenGL 프로그램 안에서만 컴파일, 링킹될 수 있음
  • 컴파일, 링킹, 실행은 위 코드에서 while문 전(렌더링 시작 전)에 한번만

1. Compiling a Shader

  1. Shader Object를 생성
  2. Shader Object에 Source code(a string or set of strings) 제공
  3. Shader Object가 코드 컴파일

📃 Compiling a Shader (p.15)

  • 소스코드 = 쉐이더

2. Linking a Shader Program

  • 에러 확인 후 없으면 Linking
  • 쉐이더들을 하나의 shader program으로 링크
  1. shader program object 생성
  2. 각 shader object를 shader program object에 attach (OpenGL에게 이 shader program에는 이러한 shader들이 사용되어야한다고 알려줌)
  3. shader program object에게 링크를 요청하여 shader들을 함께 링크

📃 Linking a Shader Program (p.17)

3. Using a Shader Program

  • object를 렌더링할 때 shader program을 사용
profile
( •̀ .̫ •́ )✧

0개의 댓글