Learning
레슨 8 / 8·15분

GLSL 레퍼런스

GLSL 핵심 레퍼런스

GLSL에서 자주 사용하는 데이터 타입, 내장 함수, 수식어(qualifier), 전처리 지시자를 정리합니다. Fragment 셰이더와 Vertex 셰이더 양쪽에서 공통으로 사용되는 함수와 각 셰이더 전용 변수를 빠르게 참조할 수 있습니다.

glsl
// ══════════════════════════════════════════
// 데이터 타입
// ══════════════════════════════════════════
// 스칼라:  float, int, bool
// 벡터:   vec2, vec3, vec4 (float)
//         ivec2, ivec3, ivec4 (int)
//         bvec2, bvec3, bvec4 (bool)
// 행렬:   mat2, mat3, mat4
// 텍스처: sampler2D, samplerCube

// ══════════════════════════════════════════
// 수식어 (Qualifier)
// ══════════════════════════════════════════
// attribute — 버텍스 셰이더 입력 (정점 데이터)
// uniform   — 모든 셰이더 공통 입력 (CPU에서 전달)
// varying   — 버텍스 → 프래그먼트 전달 (보간됨)
// const     — 컴파일 타임 상수
// precision — 정밀도 (lowp, mediump, highp)

// ══════════════════════════════════════════
// 내장 변수
// ══════════════════════════════════════════
// [Vertex Shader]
// gl_Position  — 출력: 정점 클립 좌표 (vec4, 필수)
// gl_PointSize — 출력: 점 크기 (float)
//
// [Fragment Shader]
// gl_FragCoord — 입력: 픽셀 윈도우 좌표 (vec4)
// gl_FragColor — 출력: 픽셀 최종 색상 (vec4)
// gl_FrontFacing — 입력: 앞면 여부 (bool)
glsl
// ══════════════════════════════════════════
// 수학 함수
// ══════════════════════════════════════════
// abs(x)            절대값
// sign(x)           부호 (-1, 0, 1)
// floor(x)          내림
// ceil(x)           올림
// fract(x)          소수 부분 (x - floor(x))
// mod(x, y)         나머지 (x - y * floor(x/y))
// min(x, y)         최솟값
// max(x, y)         최댓값
// clamp(x, a, b)    범위 제한 (a <= x <= b)
// mix(a, b, t)      선형 보간 (a*(1-t) + b*t)
// step(edge, x)     x >= edge ? 1.0 : 0.0
// smoothstep(a,b,x) a~b 구간 부드러운 전환

// ══════════════════════════════════════════
// 삼각/지수 함수
// ══════════════════════════════════════════
// sin(x), cos(x), tan(x)
// asin(x), acos(x), atan(y, x)
// pow(x, y)         거듭제곱
// exp(x), exp2(x)   지수 함수
// log(x), log2(x)   로그 함수
// sqrt(x)           제곱근
// inversesqrt(x)    역제곱근

// ══════════════════════════════════════════
// 벡터/기하 함수
// ══════════════════════════════════════════
// length(v)         벡터 길이
// distance(a, b)    두 점 거리
// dot(a, b)         내적
// cross(a, b)       외적 (vec3만)
// normalize(v)      단위 벡터
// reflect(I, N)     반사 벡터
// refract(I, N, r)  굴절 벡터

// ══════════════════════════════════════════
// 텍스처 함수
// ══════════════════════════════════════════
// texture2D(sampler, uv)     2D 텍스처 샘플링
// textureCube(sampler, dir)  큐브맵 샘플링
  • float/vec/mat — 스칼라, 벡터(2~4D), 행렬(2x2~4x4)
  • attribute/uniform/varying — 셰이더 간 데이터 전달 수식어
  • mix, step, smoothstep — 색상/형태 블렌딩의 핵심 3 함수
  • fract, mod — 반복 패턴 생성의 핵심
  • length, distance, normalize — 기하 연산 함수
  • reflect, refract — 반사/굴절 연산
  • sin, cos, atan — 파동, 회전, 방사형 패턴에 필수
  • texture2D — 텍스처 샘플링의 핵심 함수
💡

GLSL ES 1.0(WebGL 1)에서는 for 루프의 조건에 상수만 사용 가능하고, 배열 인덱스도 상수여야 합니다. WebGL 2(GLSL ES 3.0)에서는 이 제한이 완화되며, texture() 함수(texture2D 대체), in/out 키워드(attribute/varying 대체) 등 개선된 문법을 사용할 수 있습니다.