Shader Compile
glCreateShader
GLuint glCreateShader(GLenum shaderType)
- shaderType: 생성할 셰이더의 유형
- GL_COMPUTE_SHADER: 컴퓨팅 프로세서에서 실행되도록 만들어진 프로그래밍 가능한 셰이더
- GL_VERTEX_SHADER: 정점 프로세서에서 실행되도록 만들어진 프로그래밍 가능한 셰이더
- GL_TESS_CONTROL_SHADER: 테셀레이션 프로세서에서 실행되도록 만들어진 제어 단계에서 프로그래밍 가능한 셰이더
- GL_TESS_EVALUATION_SHADER: 테셀레이션 프로세서에서 실행되도록 만들어진 평가 단계에서 프로그래밍 가능한 셰이더
- GL_GEOMETRY_SHADER: 지오메트리 프로세서에서 실행되도록 만들어진 셰이더
- GL_FRAGMENT_SHADER: 프래그먼트 프로세서에서 실행되도록 만들어진 셰이더
glShaderSource
void glShaderSource(GLuint shader,
GLsizei count,
const GLchar** string,
const GLint* length)
- shader: 소스 코드를 바꿀 셰이더 객체의 핸들
- count: 명시할 소스 코드의 개수
- string: 실제 소스 코드가 들어있는 문자열의 주소값
- length: 문자열 길이 (전체를 사용할 경우 nullptr)
glCompileShader
void glCompileShader(GLuint shader)
과정
static unsigned int CompileShader(unsigned type, const std::string& source) {
unsigned int id = glCreateShader(type);
const char* src = source.c_str();
glShaderSource(id, 1, &src, nullptr);
glCompileShader(id);
}
Shader Create
과정
static unsigned int CreateShader(const std::string& vertexShader, const std::string& fragShader) {
// 셰이더 프로그램 객체 생성
unsigned int program = glCreateProgram();
unsigned int vs = CompileShader(GL_VERTEX_SHADER, vertexShader);
unsigned int fs = CompileShader(GL_FRAGMENT_SHADER, fragShader);
// 컴파일된 셰이더 코드를 program에 추가하고 링크
glAttachShader(program, vs);
glAttachShader(program, fs);
glLinkProgram(program);
glValidateProgram(program);
// 셰이더 프로그램을 생성했으므로, vs, fs 개별 프로그램 삭제
glDeleteShader(vs);
glDeleteShader(fs);
return program;
}
실행결과

진행과정
참고영상