-
Notifications
You must be signed in to change notification settings - Fork 13
[Note] Program 2.2
Juhwi Eden Kim edited this page Oct 13, 2019
·
4 revisions
-
glDrawArrays(GLenum mode, Glint first, GLsize count);
: 이 함수가 호출될 때, pipeline에 있는 GLSL 코드가 실행
-
GLuint
는 unsigned int
- init() 함수는 createShaderProgram()를 호출
- createShaderProgram()은 vShaderSource와 fShaderSource로 쉐이더 코드를 스트링 형태로 받음
- glCreateShader()은 GL_VERTEX_SHADER와 GL_FRAGMENT_SHADER 형의 쉐이더 두개를 생성, OpenGL이 두개의 빈 쉐이더 개체를 만들고 나면 정수형 ID 반환, 이것을 vShader와 fShader에 저장
- glShaderSource()는 vShaderSource와 fShaderSource에 저장된 쉐이더 스트링을 빈 쉐이더 개체에 로드 (쉐이더를 로드할 쉐이더 개체, 쉐이더 소스코드의 스트링 개수(각 쉐이더의 스트링 개수가 1), 소스코드 스트링 포인터 배열과 여기선 nullptr를 parameter로 받음)
- glCompileShader()는 쉐이더를 컴파일
- vfProgram이라는 프로그램 개체를 생성, 정수형 ID 저장 : 이 개체는 컴파일된 쉐이더를 저장
- glCreateProgram() : 프로그램 개체 생성
- glAttachShader() : 쉐이더를 프로그램 개체에 연결
- glLinkProgram() : GLSL 컴파일러에게 compatible 여부 확인 -> 조건문에서 확인
- glUseProgram() : 컴파일된 쉐이더를 가지고 있는 프로그램 개체를 파이프라인 스테이지로 로드 (GPU로 전달), 쉐이더를 실행하는 것은 아니고 전달만 함
- glDrawArray() : 이 예제에선 점 하나를 찍음
- vertex shader : vertex 쉐이더는 정점(vertex)를 파이프라인에 내려보내는 역할을 함
- gl_Position : 3D 공간에 정점의 좌표 위치를 설정하는데 쓰이는 built-in 변수, 파이프라인의 다음 단계로 보내짐, XYZ 좌표와 1.0 vec4 값을 받음
- fragment shader : 파이프라인을 거쳐 rasterize에 도착한 정점들을 픽셀(정확히는 fragment) location으로 변환시켜줌, display될 픽셀의 RGB 계산
- out : color 변수를 아웃풋임을 나타내는 태그, gl_Position은 애초에 아웃풋 변수여서 out 태그가 필요 없음
- 데이터 세트들은 파이프라인으로 내려보내지려면 buffer 단위로 구성되어야 함. 이 버퍼들은 다시 Vertex Array Objects (VAO)로 구성됨. 버퍼를 쓰지 않아도 최소 1개의 VAO 필요
- vertex processing -> rasterization -> fragment processing
- rasterization: primitive(triangle, 여기선 point)가 픽셀로 변환