OpenGL Shader – 6

OpenGL Setup for GLSL- Shader 생성하기
원문 : http://www.lighthouse3d.com/opengl/glsl/index.php?oglshader

다음 그림은 쉐이더를 생성하는데 필요한 단계를 보이고 있다.
첫번째 단계(glCreateShader)는 쉐이더 컨테이너로써 수행하는 오브젝트를 생성하는 것이다. 이 함수는 컨테이너의 헨들을 반환한다.

이 함수에 대한 OpenGL 2.0 문법은 다음과 같다:

GLuint glCreateShader(GLenum shaderType);
Parameter:
  shaderType – GL_VERTEX_SHADER  또는  GL_FRAGMENT_SHADER

ARB 확장문법은 다음과 같다.

GLhandleARB glCreateShaderObjectARB(GLenum shaderType);
Parameter:
  shaderType – GL_VERTEX_ARB 또는 GL_FRAGMENT_SHADER_ARB

프로그램에 추가하고자 하는 만큼의 쉐이더를 생성할 수 있지만, remember that there can only be a main function for the set of vertex shaders and one main function for the set of fragment shaders in each single program.

다음 단계(glShaderSource)는 특정한 소스 코드를 추가하는 것이다. 소스 코드는 문자 배열이다.

이 함수에 대한 OpenGL 2.0에 대한 형태는 다음과 같다.

void glShaderSource(GLuint shader, int numOfString. const char** strings, int *lenOfStrings);
Parameters:
  shader – 쉐이더의 핸들
  numOfStrings – 문자 배열의 구성 요소 수
  strings – 문자 배열
  lenOfStrings – 각 문자열의 길이를 가지는 배열 또는 NUL값(문자열들이 NULL로 끝남)

다음은 이 함수에 대한 ARB 확장이다.

void glShaderSourceARB(GLhandleARB shader, int numOfStrings, const char **strings, int *lenOfStrings);
Parameters:
  OpenGL 2.0 형태의 인자 설명과 동일함

최종적으로, 쉐이더는 반드시 컴파일 되어져야 한다. 세번째 단계(glCompileShader)가 쉐이더 코드를 컴파일해주며 OpenGL 2.0에서의 형태는 다음과 같다.

void glCompileShader(GLuint shader);
Parameters:
  shader – 쉐이더의 핸들

다음으로 ARB 확장에 대한 형태는 다음과 같다.

void glCompileShaderARB(GLhandleARB shader);
Parameters:
  shader – 쉐이더의 핸들

Rearrange, 정리하다.

아래의 사진은 제가 다니는 회사입니다. ㅡOㅡ; 회사가 시장바닦? ㅎㅎ 농담이구, 사실은 회사가 홍제역 쪽이고 회사를 나서면 바로 인왕시장이 있습니다. 바로 그 시장 안에 상인들을에게 밥을 파는 작은 식당 안에서 비빔밥을 주문하고, 식당 안에서 기다리며 헨폰으로 찍은 사진입니다. 이 식당이 얼마나 좋냐면…. 시장 상인을 대상으로 하는만큼, 아침 일찍 엽니다. 그리고 2,000원 짜리 백반이 나오는데 밥 한공기와 반찬 2개, 국 한그릇이 나오구요. 아침에 출근하면서 종종 먹고, 점심때도 가끔 가서 먹게 됩니다. 음식 맛이 편안합니다. 먹고 나면 속이 편하다니 그 음식 맛이 편한거죠.


아니… 다니는 회사 얘기를 잠시 하다가 시장에 있는 식당 이야기로 빠지는지 모를 노릇이지만, 여.하.튼…. 요즘 복잡합니다. 제 머리속이…. 전직장에서부터 지금까지 이것저것 머리속에 계획해 놓은 것들이 저를 복잡하게 만듭니다. 이 복잡함이 제 집중력을 저하시킵니다. 집중력이 저하되니 무기력해집니다. 그래서 오늘, 그 동안 계획했던 것들 몇가지를 사상적으로 정리하고자 합니다. 사상적으로 정리를 하면 그 사상적인 것에 대한 구체적 실행계획도 자연스레 제거가 될 것 같습니다.

무엇을 버리고 무엇을 얻을 것인가…. 버리지 않고서는 도무지 새로운 것을 수용할 내 머리나 가슴에 빈자리가 없는 것같습니다. 복잡하게 어질러져 버린 것을 정리하면서 버릴것은 버리고… 그 빈자리에 정말 중요한 것을 놓도록 해야겠습니다.