- 유니폼
- 애플리케이션이 직접 쉐이더 스테이지로 데이터를 전달하는 방법
- 디폴트 블록 유니폼
- 위치, 텍스처 좌표 등 버텍스별로 필요한 데이터가 아닌,
전체 프리미티브 배치를 렌더링하는 동안 또는 그 후에도 변하지 않는 데이터를 쉐이더에 전달하는 방법 (ex. 변환행렬) - 유니폼은 어떤 쉐이더 스테이지에도 들어갈수있다.
- Example
- uniform float fTime;
uniform int iIndex; - 항상 상수로 간주. 선언시에 디폴드 값 초기화 외에는 쉐이더 내에서 변경 불가능.
- 동일한 유니폼을 여러 쉐이더 스테이지에 선언한다면, 각각의 스테이지는 동일한 유니폼값을 가진다.
- Example
- layout (location = 17) uniform vec4 myUniform;
- 위치 17에 할당됨
- 설정하지 않을 시에 OpenGL이 자동으로 설정
- glGetUniformLocation
- uniform 변수에 어떤 위치가 할당되었는지 확인
GLint glGetUniformLocation(
GLuint program, const GLchar *name )
;- Example
- GLint loc = glGetUniformLocation(myProgram, "vColor");
- 유니폼 이름이 프로그램에 없는 경우 -1 리턴
- 쉐이더에서 해당 유니폼을 사용하지 않을 경우,
컴파일시 사라질 수도 있다. - 대소문자 유의
- 설정
- 스칼라 및 벡터
void glUniform1f(
GLint location, GLfloat v0 )
;void glUniform2f(
GLint location, GLfloat v0, GLfloat v1 )
;void glUniform3f(
GLint location, GLfloat v0, GLfloat v1, GLfloat v2 )
;void glUniform4f(
GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3 )
;void glUniform1i(
GLint location, GLint v0 )
;void glUniform2i(
GLint location, GLint v0, GLint v1 )
;- Example
- glUseProgram(myShader);
glUniform1f(locTime, 12.3f);
glUniform1i(locFlag, GL_TRUE);
glUniform4f(locColor, 0.0f, 1.0f, 0.0f, 1.0f); - 배열
void glUniform1fv(
GLint location, GLsizei count, const GLfloat *value )
;void glUniform2fv(
GLint location, GLsizei count, const GLfloat *value )
;void glUniform3fv(
GLint location, GLsizei count, const GLfloat *value )
;void glUniform4fv(
GLint location, GLsizei count, const GLfloat *value )
;void glUniform1iv(
GLint location, GLsizei count, const GLint *value )
;void glUniform2iv(
GLint location, GLsizei count, const GLint *value )
;- Example
- GLfloat vColors[2][4] = {{1.0f, 1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f, 1.0f}};
glUniform4fv(locColor, 2, vColors); - 행렬
void glUniformMatrix2fv(
GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
;void glUniformMatrix3fv(
GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
;void glUniformMatrix4fv(
GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
;void glUniformMatrix2x3fv(
GLint location, GLsizei count, GLboolean transpose, const GLfloat *value )
;- count: 포인터 인자 value가 가리키는 행렬 개수
- transpose: GL_FALSE(열 우선, 기본), GL_TRUE(행 우선)
2018년 3월 27일 화요일
5.2.1 디폴트 블록 유니폼
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기