처리과정

//------------------------------------------------------------------------------
// 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
Posted by 돌비
,