Add Shader Program

정민용·2025년 1월 21일

OpenGL

목록 보기
3/5

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)
  • 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;
}

실행결과

진행과정
참고영상

0개의 댓글