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

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

특징

편집

버전

편집

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

GLSL 버전 OpenGL 버전 날짜 셰이더 전처리기
1.10.59[1] 2.0 2004년 4월 30일 #version 110
1.20.8[2] 2.1 2006년 9월 7일 #version 120
1.30.10[3] 3.0 2009년 11월 22일 #version 130
1.40.08[4] 3.1 2009년 11월 22일 #version 140
1.50.11[5] 3.2 2009년 12월 4일 #version 150
3.30.6[6] 3.3 2010년 3월 11일 #version 330
4.00.9[7] 4.0 2010년 7월 24일 #version 400
4.10.6[8] 4.1 2010년 7월 24일 #version 410
4.20.11[9] 4.2 2011년 12월 12일 #version 420
4.30.8[10] 4.3 2013년 2월 7일 #version 430
4.40.9[11] 4.4 2014년 6월 16일 #version 440
4.50.7[12] 4.5 2017년 5월 9일 #version 450
4.60.5[13] 4.6 2018년 6월 14일 #version 460

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

GLSL ES 버전 OpenGL ES 버전 WebGL 버전 GLSL 버전 기반 날짜 셰이더 전처리기
1.00.17[14] 2.0 1.0 1.20 2009년 5월 12일 #version 100 es
3.00.6[15] 3.0 2.0 3.30 2016년 1월 29일 #version 300 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);
 }

같이 보기

편집

각주

편집

외부 링크

편집