GLSL

GLSL(OpenGL Shading Language, OpenGL 셰이딩 언어)는 C 언어를 기초로 한, 상위 레벨 셰이딩 언어이다. GLslang로도 알려져 있다. HLSL과 유사한 이 언어는 어셈블리 언어나 하드웨어에 의존한 언어를 사용하지 않고, 개발자가 그래픽스 파이프라인을 직접 제어할 수 있도록 OpenGL ARB()가 책정하였다.

GLSL은 프로파일이 있어서 개발자는 Cg로 개발한 코드를 바로 변환할 수도 있다.

특징 
 매킨토시나 윈도우, 리눅스 등의 여러 운영 체제 간의 호환성을 지원한다.
 GLSL을 지원하는 어떠한 제조사의 그래픽 카드에서도 동작하는 셰이더를 쓸 수 있다.
 하드웨어 제조사는 그래픽 카드 장치 드라이버 내에 GLSL 컴파일러를 포함할 수 있도록 지원한다. 이 덕분에, 그 그래픽 카드의 마이크로아키텍처에 최적화된 코드를 만들 수 있다.

버전 
GLSL 버전은 OpenGL API의 특정 버전과 함께 진화해왔다. GLSL과 OpenGL 메이저, 마이너 버전이 매칭되는 OpenGL 버전 3.3 이상에서만 지원된다.
GLSL과 OpenGL의 이 버전들은 다음의 표와 관련된다:

OpenGL ES과 WebGL은 OpenGL ES Shading Language, 간단히 줄여 GLSL ES를 사용한다.

예제

간단한 GLSL 버텍스 셰이더 
다음은 고정 기능 파이프 라인과 마찬가지로 입력 정점을 변환한다.
 void main (void)
 {
     gl_Position = ftransform ();
 }
ftransform()는 GLSL 1.40과 GLSL ES 1.0에서 지원되지 않는다. 대신, 프로그래머는 새로운 OpenGL 3.1 표준에 따라 모델 뷰 행렬과 투영 행렬을 명시적으로 지정할 필요가 있다.
 # version 140
 uniform mat4 projectionMatrix;
 uniform mat4 modelviewMatrix;
 in vec3 position;

 void main (void)
 {
     gl_Position = projectionMatrix * modelviewMatrix * vec4 (position, 1.0);
 }

간단한 GLSL 지오메트리 셰이더 
 layout (triangles) in;
 layout (triangle_strip, max_vertices = 3) out;

 in Input
 {
     vec4 Position;
 } VSout [3];

 void main (void)
 {
     for (int i = 0; i <3; i + +)
     {
         gl_Position = VSout [i]. Position;
         EmitVertex ();
     }
     EndPrimitive ();
 }

간단한 GLSL 프레그먼트 셰이더 
 void main (void)
 {
     gl_FragColor = vec4 (1.0, 0.0, 0.0, 1.0);
 }

각주

외부 링크 
 GLSL 언어 명세, 버전 1.30

셰이더 언어
그래픽 라이브러리
3차원 컴퓨터 그래픽스
C 프로그래밍 언어 계열