본문으로 이동

GLSL

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

GLSL(OpenGL Shading Language, OpenGL 셰이딩 언어)는C 언어를 기초로 한, 상위 레벨 셰이딩 언어이다.GLslang로도 알려져 있다.HLSL과 유사한 이 언어는어셈블리 언어하드웨어에 의존한 언어를 사용하지 않고, 개발자가그래픽스 파이프라인을 직접 제어할 수 있도록OpenGLARB(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 버텍스 셰이더

[편집]

다음은 고정 기능 파이프 라인과 마찬가지로 입력 정점을 변환한다.

voidmain(void)
{
gl_Position=ftransform();
}

ftransform()는 GLSL 1.40과 GLSL ES 1.0에서 지원되지 않는다. 대신, 프로그래머는 새로운 OpenGL 3.1 표준에 따라 모델 뷰 행렬과 투영 행렬을 명시적으로 지정할 필요가 있다.

# version 140
uniformmat4projectionMatrix;
uniformmat4modelviewMatrix;
invec3position;

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

간단한 GLSL 지오메트리 셰이더

[편집]
layout(triangles)in;
layout(triangle_strip,max_vertices=3)out;

inInput
{
vec4Position;
}VSout[3];

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

간단한 GLSL 프레그먼트 셰이더

[편집]
voidmain(void)
{
gl_FragColor=vec4(1.0,0.0,0.0,1.0);
}

같이 보기

[편집]

각주

[편집]

외부 링크

[편집]