close
본문으로 이동

GLSL

위키백과, 우리 모두의 백과사전.

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.02004년 4월 30일#version 110
1.20.8[2]2.12006년 9월 7일#version 120
1.30.10[3]3.02009년 11월 22일#version 130
1.40.08[4]3.12009년 11월 22일#version 140
1.50.11[5]3.22009년 12월 4일#version 150
3.30.6[6]3.32010년 3월 11일#version 330
4.00.9[7]4.02010년 7월 24일#version 400
4.10.6[8]4.12010년 7월 24일#version 410
4.20.11[9]4.22011년 12월 12일#version 420
4.30.8[10]4.32013년 2월 7일#version 430
4.40.9[11]4.42014년 6월 16일#version 440
4.50.7[12]4.52017년 5월 9일#version 450
4.60.5[13]4.62018년 6월 14일#version 460

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

GLSL ES 버전OpenGL ES 버전WebGL 버전GLSL 버전 기반날짜셰이더 전처리기
1.00.17[14]2.01.01.202009년 5월 12일#version 100 es
3.00.6[15]3.02.03.302016년 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);
 }

같이 보기

[편집]

각주

[편집]

외부 링크

[편집]