처리과정
//------------------------------------------------------------------------------
// 1. shader 생성
//------------------------------------------------------------------------------
vertex shader 생성
GLuint vertShader; // 쉐이더객체의 핸들
vertShader = glCreateShader(GL_VERTEX_SHADER);
fragment shader 생성
GLuint fragShader; // 쉐이더객체의 핸들
fragShader = glCreateShader(GL_FRAGMENT_SHADER);
//------------------------------------------------------------------------------
// 2. 생성된 쉐이더에 소스코드를 적재한다.
//------------------------------------------------------------------------------
const GLchar* sourceVertShader;
const GLchar* sourceFragShader;
sourceVertShader = (GLchar*)[[NSString stringWithContentsOfFile:file1 encoding:NSUTF8StringEncoding error:nil] UTF8String];
sourceFragShader = (GLchar*)[[NSString stringWithContentsOfFile:file2 encoding:NSUTF8StringEncoding error:nil] UTF8String];
glShaderSource(vertShader, 1, &sourceVertShader, NULL);
glShaderSource(fragShader, 1, &sourceFragShader, NULL);
//------------------------------------------------------------------------------
// 3. 쉐이더를 컴파일한다
//------------------------------------------------------------------------------
glCompileShader(vertShader);
glCompileShader(fragShader);
//------------------------------------------------------------------------------
// 4. 컴파일 결과를 확인한다.
//------------------------------------------------------------------------------
GLint status;
glGetShaderiv(vertShader, GL_COMPILE_STATUS, status);
if(status != GL_TRUE)
{
glDeleteShader(vertShader);
return;
}
glGetShaderiv(fragShader, GL_COMPILE_STATUS, status);
if(status != GL_TRUE)
{
glDeleteShader(fragShader);
return;
}
//------------------------------------------------------------------------------
// 쉐이더 컴파일 에러날때 에러내용 보기
//------------------------------------------------------------------------------
GLint logLength;
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &logLength);
if (logLength > 0)
{
GLchar *log = (GLchar*)malloc(logLength);
glGetShaderInfoLog(*shader, logLength, &logLength, log);
NSLog(@"Shader compile log:\n%s", log);
free(log);
}
//------------------------------------------------------------------------------
// 함수 원형
//------------------------------------------------------------------------------
GLuint glCreateShader(GLenum type);
GLuint glDeleteShader(GLuint shader); // 즉시 삭제하지 않는다. 참조가 없어지면 해제됨
void glShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length);
void glCompileShader(GLuint shader);
void glGetShaderiv(GLuint shader, GLenum pname, GLint *params);
반응형
'OpenGLES 초보' 카테고리의 다른 글
opengles 에서 gluPerspective 함수 구현 (0) | 2014.07.04 |
---|---|
어파인 공간 (Affine Space) (0) | 2014.07.04 |
3차원 물체의 표현 (0) | 2014.07.04 |
Program(프로그램) 객체 (0) | 2014.07.04 |
기본 (0) | 2014.07.04 |