⋯1번째 줄 근처
+추가: ## 개요
+추가: GLSL(OpenGL Shading Language)은 C 프로그래밍 언어를 기반으로 한 문법을 갖춘 고수준 셰이딩 언어이다. GLslang이라는 이름으로도 알려져 있다. OpenGL ARB(Architecture Review Board)가 개발했으며, 개발자가 어셈블리 언어나 하드웨어 종속 언어를 사용하지 않고 그래픽스 파이프라인을 직접 제어할 수 있도록 하기 위해 만들어졌다[1][2][3]. HLSL과 유사한 설계를 가지며, 크로노스 그룹(Khronos Group) 산하에서 표준화된다. 2004년 OpenGL 2.0 코어에 정식 포함되면서 처음 공개되었다[1][3].
+추가:
+추가: ## 기능과 사용법 개요
+추가:
+추가: ### 언어 설계와 C와의 관계
+추가:
+추가: GLSL은 C, C++과 동일한 연산자를 가지나 포인터는 없다. 비트 연산자는 버전 1.30에서 추가되었다[3]. 제어 구조는 C와 유사하게 if-else, for, switch, 루프와 분기를 지원한다. 재귀는 금지되며 컴파일 시 검사된다[3].
+추가:
+추가: 사용자 정의 함수를 지원하며, 다수의 내장 함수가 제공된다. 그래픽스 카드 제조사는 내장 함수를 하드웨어 수준에서 최적화할 수 있다[3]. 많은 내장 함수는 C 수학 라이브러리와 유사하며, 그래픽스 전용 함수도 다수 포함된다. 내장 함수와 연산자 대부분은 스칼라와 벡터(최대 4요소) 양쪽에서 동작한다. 대표적인 그래픽스용 내장 함수로는 mix, smoothstep, normalize, inversesqrt, clamp, length, distance, dot, cross, reflect, refract, 벡터 min/max 등이 있다. abs, sin, pow 등도 벡터 인자로 동작한다(예: `pow(vec3(1.5, 2.0, 2.5))`, `abs(vec3(0.1, -0.2, 0.3))`)[3].
+추가:
+추가: 함수 오버로딩을 지원해 내장 함수, 연산자, 사용자 정의 함수 모두 같은 이름에 다른 매개변수 개수나 타입을 가진 여러 정의를 가질 수 있으며, 각각 독립적인 반환 타입을 가질 수 있다[3].
+추가:
+추가: ### 프리프로세서
+추가:
+추가: GLSL은 C 프리프로세서(CPP)의 부분 집합을 정의하며, 버전과 OpenGL 확장을 지정하는 고유 지시어를 추가한다. 파일 이름 관련 부분(`#include`, `__FILE__` 등)은 제거되었다[3].
+추가:
+추가: `GL_ARB_shading_language_include` 확장(NVIDIA 드라이버의 Windows·Linux, Mesa 20.0.0 이상 Linux·FreeBSD·Android에서 구현)을 통해 `#include`를 소스 코드에서 사용할 수 있어, 여러 셰이더 간 코드와 정의를 수동 전처리 없이 공유하기 쉬워졌다[3]. Vulkan용으로는 `GL_GOOGLE_include_directive`, `GL_GOOGLE_cpp_style_line_directive` 확장이 있으며, 참조 SPIR-V 컴파일러(glslang/glslangValidator)에서 지원된다[3].
+추가:
+추가: ### 셰이더 유형과 파이프라인 단계
+추가:
+추가: GLSL로 작성하는 셰이더는 그래픽스 파이프라인의 각 단계를 담당한다. 주요 셰이더 유형은 다음과 같다.
+추가:
+추가: - **버텍스 셰이더(Vertex Shader)**: 입력 정점을 변환한다. 고정 기능 파이프라인의 `ftransform()`은 GLSL 1.40과 GLSL ES 1.0에서 지원되지 않으며, OpenGL 3.1 표준에 따라 모델뷰 행렬과 투영 행렬을 명시적으로 지정해야 한다[2].
+추가: - **프레그먼트 셰이더(Fragment Shader)**: 픽셀 단위 색상과 깊이 등을 결정한다.
+추가: - **지오메트리 셰이더(Geometry Shader)**: OpenGL 3.2부터 지원. 프리미티브를 입력받아 새로운 프리미티브를 생성하거나 수정한다[3].
+추가: - **테셀레이션 셰이더(Tessellation Shader)**: OpenGL 4.0부터 지원. 테셀레이션 제어 셰이더와 테셀레이션 평가 셰이더로 구성되며, 패치 분할과 정점 생성을 제어한다[3].
+추가: - **컴퓨트 셰이더(Compute Shader)**: OpenGL 4.3부터 지원. 그래픽스 파이프라인 밖에서 범용 병렬 연산을 수행한다[3].
+추가:
+추가: ### 컴파일과 실행 모델
+추가:
+추가: GLSL 셰이더는 독립 실행 프로그램이 아니며, OpenGL API를 사용하는 애플리케이션이 필요하다. OpenGL은 Linux, macOS, Windows 등 다수 플랫폼에서 사용 가능하며 C, C++, C#, JavaScript, Delphi, Java 등 다양한 언어 바인딩이 있다[3].
+추가:
+추가: 셰이더 소스는 문자열 집합 형태로 애플리케이션 내부에서 OpenGL API 진입점을 통해 하드웨어 제조사 드라이버로 전달되어 컴파일된다. 셰이더는 애플리케이션 내부에서 즉석 생성하거나 텍스트 파일로 읽어올 수 있으나, 결국 드라이버에는 문자열 형태로 전달되어야 한다[3].
+추가:
+추가: Vulkan에서도 GLSL 셰이더를 흔히 사용한다. GLSL은 사용 전 오프라인 컴파일러로 SPIR-V라는 바이너리 바이트코드 포맷으로 사전 컴파일하거나 런타임에 컴파일한다[3].
+추가:
+추가: ### 크로스 플랫폼 호환성과 드라이버 내장 컴파일러
+추가:
+추가: GLSL의 주요 이점은 다음과 같다[2][3].
+추가:
+추가: - Linux, macOS, Windows 등 다중 운영체제 간 크로스 플랫폼 호환성 제공.
+추가: - GLSL을 지원하는 어떤 제조사의 그래픽 카드에서도 동작하는 셰이더 작성 가능.
+추가: - 각 하드웨어 제조사가 자사 드라이버에 GLSL 컴파일러를 포함하므로, 해당 그래픽 카드 마이크로아키텍처에 최적화된 코드 생성 가능.
+추가:
+추가: ## 생태계·커뮤니티
+추가:
+추가: ### 표준화 기구와 레지스트리
+추가:
+추가: GLSL은 크로노스 그룹(Khronos Group) 산하 OpenGL ARB가 표준화한다. 공식 사양과 레지스트리는 OpenGL 공식 웹사이트(opengl.org)에서 제공된다[4]. OpenGL Registry에는 확장 명세, 헤더 파일, 버전별 레퍼런스 페이지가 정리되어 있다[4].
+추가:
+추가: ### 주요 도구와 라이브러리
+추가:
+추가: - **glslang / glslangValidator**: 공식 참조 SPIR-V 컴파일러. GLSL을 SPIR-V로 변환하며, Vulkan 개발에서 표준적으로 쓰인다[3].
+추가: - **SPIRV-Cross**: SPIR-V와 GLSL/GLSL ES/HLSL/MSL 간 상호 변환 도구[3].
+추가: - **Mesa 3D**: 오픈소스 OpenGL 구현. Linux, FreeBSD, Android 등에서 오픈소스 드라이버 스택의 핵심이며, GLSL 컴파일러를 포함한다[4].
+추가: - **LWJGL(Lightweight Java Game Library)**: Java용 OpenGL 바인딩을 제공하며, GLSL 셰이더를 Java 애플리케이션에서 사용 가능하게 한다[2][3].
+추가: - **Shadertoy**: 웹 기반 GLSL 셰이더 공유·실행 플랫폼. WebGL(GLSL ES)을 사용해 브라우저에서 즉시 셰이더를 작성·테스트·공유할 수 있다[3].
+추가:
+추가: ### 문서와 학습 자료
+추가:
+추가: 공식 사이트는 OpenGL 4, 3.3, 2.1 레퍼런스 페이지, 프로그래밍 언어 바인딩, 샘플 코드·튜토리얼, 벤치마크, 메일링 리스트·뉴스그룹, StackOverflow 링크, 아카이브 자료, 위키, 포럼 등을 제공한다[4]. 주요 서적으로는 Randi J. Rost의 "OpenGL Shading Language"(3판, Addison-Wesley, 2009), John Kessenich·David Baldwin·Randi J. Rost의 "The OpenGL Shading Language"(Version 1.10.59, 3Dlabs), Mike Bailey·Steve Cunningham의 "Graphics Shaders: Theory and Practice"(2판, CRC Press, 2009) 등이 있다[3].
+추가:
+추가: 이 문서는 GGWiki AI가 공개 자료(아래 출처)를 조사해 새로 쓴 초안입니다. 틀린 내용은 편집하거나 이의 제기로 알려 주세요.