좌표계
좌하단이 -0.5, -0.5
유니폼(Uniform 전역 셰이더 변수) 설정하기
GLint glGetUniformLocation(GLuint prog, const GLchar* name)
- 유니폼 인덱스를 반환
- 인자
- prog glCreateShader로 생성한 프로그램 객체
- name 유니폼 이름
- 반환
- 유니폼 인덱스. 실패 시 -1
void glUniform1f(GLint loc, GLfloat v0)
- 유니폼 설정
- 인자
- loc 유니폼 인덱스
- v0 값
- 기타
- glUniform1f...4f 있음
void glUniform1fv(GLint loc, GLsizei count, const GLfloat* value)
- 벡터 유니폼 설정
- 인자
- loc 유니폼 인덱스
- count 벡터 크기
- value 벡터 값이 담긴 포인터
- 기타
- glUniform1f 대신 사용 가능. 대신 count = 1
- glUniform1fv...4fv 있음
- 정수 버전: glUniform1i/glUniform1fv
void glUniformMatrix4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat* value)
- 4x4 행렬 유니폼 설정
- 인자
- loc 유니폼 인덱스
- count 변경할 행렬 크기
- transpose 항상 GL_FALSE
- value 행렬 값이 담긴 포인터
- 기타
- glUniformMatrix1fv...4fv
예제
https://github.com/ehei1/learnOpenGL/tree/main/03%20HelloUniform
while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(shaderProgram);
// 시간 값을 얻어온다
auto time = static_cast<float>(glfwGetTime());
// sin 값으로 변환
auto greenValue = sin(time) / 2.f + .5f;
// outColor에 대한 유니폼 위치를 얻어온다
auto vertexColorLocation = glGetUniformLocation(shaderProgram, "outColor");
// 설정
glUniform4f(vertexColorLocation, {}, greenValue, {}, 1.f);