개요편집이의 제기
OpenGL ES(OpenGL for Embedded Systems)는 크로노스 그룹(Khronos Group)이 정의하고 관리하는 3차원 컴퓨터 그래픽스 API인 OpenGL의 서브셋으로, 스마트폰, 태블릿, 비디오 게임 콘솔, PDA 등 임베디드 시스템과 모바일 기기를 위해 설계되었다. 데스크톱용 OpenGL에서 전력 소모가 크거나 임베디드 하드웨어에서 구현하기 어려운 기능을 덜어내고, 고정 소수점 연산 지원, 정점 배열 기반 렌더링 등 임베디드 프로세서의 특성에 맞춘 기능을 추가하여 경량화한 것이 특징이다. 로열티 프리(Royalty-free) 크로스 플랫폼 API로서 안드로이드, iOS, 웹(WebGL), 게임 콘솔, 스마트 TV, 웨어러블 기기 등 광범위한 플랫폼에 탑재되어 있으며, "역사상 가장 널리 배포된 3D 그래픽스 API"로 평가된다.[1][2][3][4]
역사편집이의 제기
개발 배경과 최초 공개
OpenGL ES는 데스크톱 OpenGL 사양을 임베디드 환경에 맞춰 축소·조정한 API로, 크로노스 그룹 주도로 표준화되었다. 2003년 7월 28일 OpenGL ES 1.0이 처음 공개되었으며, 이는 OpenGL 1.3 사양을 기준으로 삼았다.[1][3]
판본별 변화
#### OpenGL ES 1.0 (2003년 7월 28일 공개)
OpenGL 1.3 기반으로, 고정 기능 파이프라인(Fixed-function pipeline)을 제공한다. 데스크톱 OpenGL과 달리 `glBegin`/`glEnd` 블록이 필요 없으며, 프리미티브 렌더링 함수의 호출 규약이 정점 배열(vertex arrays) 중심으로 변경되었다. 임베디드 프로세서가 부동소수점 연산 장치(FPU)를 갖추지 못한 경우가 많다는 점을 고려해 고정 소수점(fixed-point) 자료형이 도입되었고, 정점 좌표 등에 이를 사용할 수 있게 했다. 경량화를 위해 다음과 같은 기능이 제거되었다:
사각형(quad) 및 다각형(polygon) 렌더링 프리미티브
텍스처 생성(texgen), 선/다각형 스티플(stipple)
다각형 모드와 앤티앨리어스드 다각형 렌더링(멀티샘플링은 가능)
ARB 이미지 픽셀 클래스 연산, 비트맵, 3D 텍스처
프론트버퍼 및 누적 버퍼(accumulation buffer) 등 고급 드로잉 모드
픽셀 단위 복사 비트맵 연산, 평가자(evaluators), 사용자 선택 연산
디스플레이 리스트, 피드백, 상태 속성의 푸시/팝 연산
백페이스 재질 매개변수, 사용자 정의 클리핑 평면 등 일부 재질 매개변수
실제 사양 버전은 1.0.0.2이다.[3]
#### OpenGL ES 1.1
OpenGL 1.5 사양을 기준으로 삼으며, 1.0에 다음 기능을 추가했다:
멀티텍스처 필수 지원 및 개선된 멀티텍스처 지원(컴바이너, 도트 프로덕트 텍스처 연산)
자동 밉맵 생성
정점 버퍼 객체(Vertex Buffer Objects)
상태 쿼리(State queries)
사용자 클리핑 평면
포인트 렌더링에 대한 더 세밀한 제어
공통 프로파일(Common, CM)과 공통 라이트 프로파일(Common Lite, CL) 두 가지 프로파일을 제공하며, CL 프로파일은 부동소수점 대신 고정소수점만 지원한다. 실제 사양 버전은 1.1.12이다.[3]
#### OpenGL ES 2.0 (2007년 3월 공개)
OpenGL 2.0을 기반으로 하되, 고정 기능 렌더링 파이프라인의 대부분을 제거하고 프로그래머블 셰이더 기반 파이프라인으로 전환했다. 이는 데스크톱 OpenGL 3.0→3.1 전환과 유사한 방향이다. 주요 변화는 다음과 같다:
변환 및 조명(Transform and Lighting) 단계의 거의 모든 기능(재질·광원 매개변수 지정 등)이 그래픽스 프로그래머가 작성하는 셰이더로 대체됨
셰이더 내 제어 흐름은 포워드 브랜칭(forward branching)과 컴파일 타임에 반복 횟수를 알 수 있는 루프로 제한
OpenGL ES 1.1과 하위 호환성이 없음
데스크톱 OpenGL과의 일부 비호환성은 OpenGL 4.1에서 `GL_ARB_ES2_compatibility` 익스텐션으로 해소됨
실제 사양 버전은 2.0.25이다. 크로노스 그룹은 OpenGL ES 2.0과 일반 OpenGL 2.0의 차이점을 설명하는 문서를 별도로 제공한다.[3]
#### OpenGL ES 3.0 (2012년 8월 공개)
OpenGL ES 2.0과 하위 호환되며, WebGL 2.0과도 부분적으로 호환된다(당시 WebGL 2.0이 OpenGL ES 3.0과의 높은 상호운용성을 목표로 설계됨). 현재 사양 버전은 3.0.6(2019년 11월)이다. 주요 신기능:
렌더링 파이프라인 강화: 오클루전 쿼리(Occlusion queries), 트랜스폼 피드백(Transform feedback), 인스턴스드 렌더링(Instanced rendering), 4개 이상의 렌더 타겟 지원
고품질 ETC2/EAC 텍스처 압축 표준 탑재로 플랫폼별 별도 텍스처 세트 불필요
GLSL ES 셰이딩 언어 신버전: 정수 및 32비트 부동소수점 연산 완전 지원
텍스처 기능 대폭 확장: 부동소수점 텍스처, 3D 텍스처, 뎁스 텍스처, 정점 텍스처, NPOT 텍스처, R/RG 텍스처, 불변 텍스처(immutable textures), 2D 배열 텍스처, 스위즐(swizzles), LOD 및 밉 레벨 클램프, 심리스 큐브 맵, 샘플러 객체 보장 지원
명시적 크기가 지정된 필수 텍스처 및 렌더버퍼 포맷 세트 제공으로 구현체 간 차이 감소 및 이식성 향상[3]
#### OpenGL ES 3.1 (2014년 3월 공개)
OpenGL ES 2.0 및 3.0과 하위 호환되며, 실제 버전은 3.1(2016년 11월)이다. 주요 추가 기능:
컴퓨트 셰이더(Compute shaders)
독립적인 정점·프래그먼트 셰이더(Independent vertex and fragment shaders)
간접 드로우 명령(Indirect draw commands)
이를 통해 애플리케이션이 새로운 기능을 점진적으로 도입할 수 있게 되었다.[3]
#### OpenGL ES 3.2 (2015년 8월 공개)
안드로이드 익스텐션 팩(AEP, Android Extension Pack)을 통합한 판본으로, 실제 상태는 3.2.6(2019년 7월)이다. 주요 신기능:
지오메트리 셰이더 및 테셀레이션 셰이더(Geometry and tessellation shaders)로 복잡한 씬을 GPU에서 효율적으로 처리
부동소수점 렌더 타겟(Floating point render targets)으로 고정밀 연산 유연성 확보
ASTC 텍스처 압축으로 텍스처 처리 시 메모리 풋프린트와 대역폭 감소
향상된 블렌딩(Enhanced blending)으로 다중 컬러 어태치먼트 합성 및 처리 개선
텍스처 버퍼, 멀티샘플 2D 배열, 큐브 맵 배열 등 고급 텍스처 타겟
디버그 및 견고성(robustness) 기능으로 개발 편의성과 보안 실행 환경 지원[3]
향후 전망
크로노스 그룹은 2017년 기준으로 OpenGL ES의 새로운 코어 버전 출시 계획이 없다고 밝혔다. 차세대 API인 Vulkan이 임베디드 및 모바일 애플리케이션에서 OpenGL ES를 대체할 것으로 판단되기 때문이다. 다만 OpenGL ES에 대한 익스텐션 개발은 지속되고 있다.[3]
특징과 기능편집이의 제기
렌더링 파이프라인 아키텍처
OpenGL ES 1.x(1.0, 1.1)는 고정 기능 파이프라인을 제공하며, 정점 변환, 조명, 텍스처 적용 등 주요 연산이 API 내부에 고정되어 있다. OpenGL ES 2.0부터는 프로그래머블 파이프라인으로 전환되어, 정점 셰이더와 프래그먼트 셰이더를 개발자가 직접 작성해야 한다. OpenGL ES 3.0 이후 버전은 2.0의 프로그래머블 파이프라인을 유지하면서 다중 렌더 타겟, 인스턴스드 렌더링, 트랜스폼 피드백, 오클루전 쿼리 등 고급 렌더링 기능을 추가했다. 3.1에서는 컴퓨트 셰이더가 도입되어 범용 연산(GPGPU)이 가능해졌고, 3.2에서는 지오메트리·테셀레이션 셰이더가 추가되어 기하 처리 능력이 데스크톱 OpenGL 4.x 수준에 근접했다.[3][4]
셰이딩 언어
OpenGL ES는 자체 셰이딩 언어인 OpenGL ES Shading Language(GLSL ES)를 사용한다. 이는 데스크톱 OpenGL의 GLSL과 별개로 진화해 왔으며, 버전별로 다음과 같은 특징을 가진다:
ES 1.x: 고정 기능 파이프라인 사용으로 셰이더 프로그래밍 불필요
ES 2.0: GLSL ES 1.00 도입, 프로그래머블 셰이더 필수
ES 3.0: GLSL ES 3.00, 정수 및 32비트 부동소수점 연산 완전 지원
ES 3.1/3.2: 컴퓨트 셰이더, 지오메트리/테셀레이션 셰이더용 언어 기능 확장
크로노스 그룹은 GLSL ES 컴파일러 프론트엔드인 `glslang`을 공식 도구로 제공한다.[4]
텍스처 압축 표준
플랫폼 간 이식성을 위해 표준 텍스처 압축 포맷을 의무화한다:
OpenGL ES 3.0: ETC2/EAC를 표준 기능으로 포함
OpenGL ES 3.2: ASTC 압축 추가 지원
이를 통해 개발자는 플랫폼별로 다른 압축 포맷을 준비할 필요 없이 단일 에셋으로 배포할 수 있다.[3][4]
지원 플랫폼 및 구현체
OpenGL ES는 크로스 플랫폼 API로, 주요 구현체 제공사는 다음과 같다(크로노스 그룹 공식 인증 제품 목록 기준):
Apple, Arm Limited, Broadcom, Creative Technology, Digital Media Professionals, Fujitsu, Google, HiSilicon, Huawei, Imagination Technologies, Intel, ITRI, Marvell, MediaTek, Nintendo, Nokia, NVIDIA, Panasonic, Qualcomm, Raspberry Pi Ltd, Samsung Electronics, Socionext, Software Freedom Conservancy, Software in the Public Interest, Sony Computer Entertainment, Takumi Corporation, VeriSilicon 등[4]
주요 플랫폼별 지원 현황은 다음과 같다:
#### 안드로이드
Android 1.0부터 OpenGL ES 1.0/1.1 지원
Android 2.2(Froyo)부터 OpenGL ES 2.0 지원(NDK는 Android 2.0부터, Java API는 2.2부터)
Android 4.3(Jelly Bean MR2)부터 OpenGL ES 3.0 지원
Android 5.0(Lollipop)부터 OpenGL ES 3.1 및 Android Extension Pack(AEP) 지원
Android 6.0(Marshmallow) 가능, 7.0(Nougat)부터 OpenGL ES 3.2 지원(Vulkan 1.0과 함께 필요)[3]
#### iOS / iPadOS
iPhone SDK 초기부터 OpenGL ES 1.1 지원(iPhone 3GS, iPod touch 3세대 이후 하드웨어 지원)
iOS 5부터 OpenGL ES 2.0 지원
iOS 7부터 OpenGL ES 3.0 지원(iPhone 5S, iPad Air, iPad mini Retina 등)
Apple은 iOS 12까지 OpenGL ES를 지원했으나, 자사 독자 API인 Metal을 위해 OpenGL ES(및 OpenGL)를 디프리케이트(deprecate) 처리함[3]
#### 게임 콘솔
PlayStation 3: OpenGL ES 1.0을 공식 그래픽스 API 중 하나로 지원(다른 하나는 저수준 libgcm), NVIDIA Cg를 GLSL 대신 사용, ES 2.0 일부 기능도 포함
PlayStation Vita: OpenGL ES 2.0 지원
PlayStation 4: OpenGL ES 2.0 지원
Nintendo 3DS: OpenGL ES 1.1 지원
Pandora 콘솔: OpenGL ES 1.x/2.0 라이브러리로 사용
GCW Zero 콘솔: OpenGL ES 2.0 지원
Raspberry Pi / Odroid: OpenGL ES 2.0 지원
Raspberry Pi 4/5: OpenGL ES 3.1 지원[3]
#### 기타 플랫폼
Symbian OS: S60v5에서 ES 1.0 공식 채택, Symbian^3 및 Maemo(Nokia N900)에서 ES 2.0 지원
MeeGo OS: 공식 API로 채택
BlackBerry: OS 5.0에서 ES 1.1 지원(Storm 2, Curve 8530만 하드웨어 가속), OS 7.0/10 및 PlayBook에서 ES 2.0 지원, 10.2부터 ES 3.0 지원
WebGL: 브라우저용 3D 그래픽스 표준으로 OpenGL ES 2.0 기반(WebGL 1.0), ES 3.0 기반(WebGL 2.0)으로 구현됨. Firefox(Gecko 1.9.3a1부터), Chrome 등 주요 브라우저 지원
Google Native Client(NaCl): OpenGL ES 2.0 지원
AmigaOS: Warp3D Nova 및 호환 Radeon HD 카드에서 ES 2.0 지원
데스크톱 GPU 드라이버: Intel HD Graphics(965G/X3000 이상, Linux), NVIDIA(Curie NV40+/Tesla G80+ 이상, Linux/Windows), AMD(Terascale/GCN 아키텍처, Windows/Linux), Mesa 소프트웨어 드라이버(LLVMpipe, softpipe) 및 가상화 드라이버(VIRGL, Zink, d3d12) 등에서 다양한 버전 지원[3]
라이선스 및 요금 체계
OpenGL ES는 로열티 프리(Royalty-free) 표준으로, 크로노스 그룹의 IP 프레임워크 하에 누구나 구현하고 사용할 수 있다. 인증 제품(Conformant Products) 프로그램과 상표 가이드라인이 별도로 운영된다.[4]
개발 도구 및 생태계
크로노스 그룹과 커뮤니티는 다음 도구와 자원을 제공한다:
레지스트리(Registry): 사양서, 헤더 파일, 레퍼런스 페이지
SDK: OpenGL ES 소프트웨어 개발 키트
glslang: 셰이딩 언어 컴파일러 프론트엔드
KTX: OpenGL 텍스처용 경량 파일 포맷
API 레퍼런스 가이드, 스택오버플로 `opengles` 태그, 일반 지원 포럼
서적: "OpenGL ES 3.0 Programming Guide", "OpenGL ES 2.0 Programming Guide", "OpenGL ES 2 for Android", "Pro OpenGL ES 2 for Android", "OpenGL Insights", "OpenGL Shading Language" 등
튜토리얼: Android Developers Guide, Kodeco 강의 등[4]
사용 게임편집이의 제기
자료에 구체적인 게임 타이틀명은 명시되지 않았으나, OpenGL ES는 안드로이드, iOS, 콘솔 등 모바일·임베디드 게임 개발의 사실상 표준 API로 광범위하게 사용된다. WebGL을 통해 브라우저 기반 게임에도 활용된다.[2][3][4]
평가편집이의 제기
장점과 업계적 위상
"역사상 가장 널리 배포된 3D 그래픽스 API"로 평가될 만큼 압도적인 설치 기반을 가짐[3]
로열티 프리 오픈 표준으로 벤더 종속성 낮음
버전별로 하위 호환성(ES 3.0→2.0, 3.1→3.0/2.0, 3.2→3.1/3.0/2.0)을 유지하며 점진적 기능 도입 가능
WebGL의 기반이 되어 웹 그래픽스 생태계의 근간을 이룸
풍부한 개발 도구, 문서, 서적, 커뮤니티 지원[4]
한계와 비판
OpenGL ES 2.0에서 1.x와의 하위 호환성을 끊으면서 기존 코드베이스 마이그레이션 비용 발생
Apple 플랫폼에서 Metal 도입 후 OpenGL ES가 디프리케이트되어 장기적 유지보수 불확실성 존재(iOS 12까지는 동작)[3]
고정 기능 파이프라인(1.x)과 프로그래머블 파이프라인(2.0+) 간 패러다임 차이로 학습 곡선 존재
차세대 API인 Vulkan이 더 낮은 오버헤드와 명시적 제어를 제공하며 임베디드·모바일에서 OpenGL ES를 대체 중. 크로노스 그룹도 새로운 코어 버전 계획 없음을 공식화[3]
호환성 레이어
데스크톱 OpenGL 애플리케이션을 OpenGL ES 환경에서 돌리기 위한 에뮬레이션 라이브러리가 존재한다:
Regal(NVIDIA, 2-clause BSD 라이선스): OpenGL 호출을 ES로 변환, Google NaCl 등에서 사용. 2016년 이후 업데이트 중단
GL4ES(MIT 라이선스): OpenGL 2.1/1.5를 ES 2.0/1.1로 에뮬레이션, glshim 기반[3]
안드로이드 익스텐션 팩 (Android Extension Pack, AEP)편집이의 제기
Google이 2014년 도입한 OpenGL ES 3.1 익스텐션 묶음으로, 단일 익스텐션 쿼리로 전체 기능 세트 사용 가능 여부를 확인할 수 있게 했다. 테셀레이션, 지오메트리 셰이더, ASTC 텍스처 압축, 부동소수점 렌더 타겟, 디버그 기능 등 데스크톱 OpenGL 4.x 수준의 고급 기능을 모바일에 선도입했다. OpenGL ES 3.2는 AEP 추가 사항을 핵심 사양으로 편입한 판본이다.[3]
OpenGL 호환성편집이의 제기
OpenGL ES는 데스크톱 OpenGL의 서브셋으로 설계되었으나, 버전에 따라 호환성 양상이 다르다:
ES 1.0 → OpenGL 1.3으로 이식 용이, 역방향은 사용 기능에 따라 다름
ES 1.1 → OpenGL 1.5 기준
ES 2.0 → OpenGL 2.0 기준, 단 OpenGL 4.1 이전까지는 비호환성 존재(`GL_ARB_ES2_compatibility`로 해소)
ES 3.0/3.1/3.2 → 데스크톱 OpenGL 4.x 기능 다수 포함, 상호운용성 향상
ANGLE(Almost Native Graphics Layer Engine)은 Google이 개발한 라이브러리로, OpenGL ES 호출을 DirectX 또는 Vulkan 호출로 변환하여 Windows 등에서 ES 애플리케이션 실행을 돕는다.[3]
관련 표준편집이의 제기
OpenGL: 데스크톱 대상 상위 호환 API
Vulkan: 차세대 저수준 고성능 API, OpenGL ES 대체 예정
WebGL: 브라우저용 3D API, ES 2.0/3.0 기반
EGL: 네이티브 플랫폼 윈도우 시스템과의 인터페이스 표준
OpenSL ES: 임베디드 오디오 API
OpenVG: 벡터 그래픽스 API
OpenCL: 병렬 연산 API
glTF, KTX, SPIR-V, SYCL 등 크로노스 그룹 생태계 표준[4]
이 문서는 GGWiki AI가 공개 자료(아래 출처)를 조사해 새로 쓴 초안입니다. 틀린 내용은 편집하거나 이의 제기로 알려 주세요.
