OpenGL ES(OpenGL for Embedded Systems)は、主に携帯電話などの組み込みシステムで使用されている3次元コンピュータグラフィックス用 API である。

OpenGL ESは、従来から存在する(主にデスクトップPCやワークステーション向けの)クロスプラットフォームなリアルタイム3DグラフィックスAPIである OpenGL のサブセットである。OpenGL同様、グラフィックスハードウェア(GPU)の機能および性能を活用した高速なグラフィックス描画が可能となる。OpenGL ESはオープン仕様でロイヤリティフリーであり、適合試験にパスすれば誰でもOpenGL ES実装を謳えるため、iOSやAndroid、Symbian OSなどの携帯端末向けオペレーティングシステムで採用されているほか、プレイステーション3やニンテンドー3DSにも採用されており、ゲーム開発でも使用されている。OpenGL ESの仕様は、OpenGLと同様にクロノス・グループによって管理されている。

## バージョン

OpenGL ES 1.x系には1.0と1.1の2つが存在する。1.x系は、グラフィックスパイプライン処理が固定されたシェーダー(固定機能シェーダー)のみに対応しており、プログラム可能なシェーディング機能(プログラマブルシェーダー)には対応していない。このため、フラットシェーディングあるいはグーローシェーディングといった、カスタマイズ不可能な頂点単位のシェーディング(陰影計算)や質感表現のみがサポートされている。ハードウェアアクセラレーションがサポートされていない複雑な陰影処理や各種エフェクトなどの高度な特殊効果を実現する場合にはGPU側の支援は受けられなくなるため、特異なコンピュータアーキテクチャでない限りは動作速度は大きく低下する。

OpenGL ES 2.0は、プログラマブルシェーダーに対応した仕様であり、シェーディング言語GLSL ESに対応する一方で固定機能シェーダーは削除されている。OpenGL ES 2.0は1.x系との完全な後方互換性はない。陰影計算・質感表現をプログラマブルシェーダーで記述することによって、GPUによる支援が受けられるようになる。

### OpenGL ES 1.0

OpenGL ES 1.0はOpenGL 1.3のサブセットとして2003年に登場した。Symbian OS と Android プラットフォームの公式3DグラフィックスAPIとして採用されている。また、SCEによるOpenGL ES 1.0の拡張版(PSGL)がプレイステーション3の公式グラフィックスAPIの1つとしてサポートされている。

### OpenGL ES 1.1

OpenGL ES 1.1はOpenGL 1.5のサブセットとして、2004年8月9日に発表。Android 1.6、iPhone、iPod touch、iPad等で広くサポートされている。1.0世代のハードウェアでもドライバーレベルのアップデートで1.1に対応可能とされる。

以下の機能がOpenGL ES 1.0に追加になっている。

- バッファオブジェクト
- 自動ミップマップ生成
- 拡張テクスチャ処理
- 頂点スキニング機能
- ユーザー定義クリッププレーン
- 拡張ポイントスプライト、ポイントスプライト配列
- 静的・動的状態クエリー
- テクスチャ描画
- 新しいコア追加、プロファイル拡張

### OpenGL ES 2.0

OpenGL ES 2.0はOpenGL 2.0のサブセットとして2007年に公開された。
iPhoneの3GS以降、iPod Touchの第3世代以降、iPad、Androidのバージョン2.2以降などでサポートされている。
プログラマブルシェーダーステージはバーテックスシェーダー(頂点シェーダー)とフラグメントシェーダー(ピクセルシェーダー)の2つをサポートする。頂点単位やピクセル単位の陰影計算・質感表現の制御がGPUにより支援される。

シェーディング言語はGLSL ES 1.0をサポートする。

なお、本家OpenGLはバージョン4.1でOpenGL ES 2.0互換プロファイルを扱うことができるようになっている (GL\_ARB\_ES2\_compatibility)。

WebGL 1.0は、ブラウザ上で利用できるOpenGL ES 2.0の派生規格であるが、細部に違いがある。

### OpenGL ES 3.0

OpenGL ES 3.0は2012年に発表された。2.0との後方互換性あり。
DirectX 10 (Direct3D 10) や本家OpenGL 3.2のジオメトリシェーダーはサポートされないが、マルチレンダーターゲット機能やマルチサンプルアンチエイリアス(MSAA)を標準サポートするようになり、またUniform BlockやTransform FeedbackなどのDirectX 10世代(統合型シェーダーアーキテクチャ世代)の機能を多数サポートする。

シェーディング言語はGLSL ES 3.0をサポートする。

なお、本家OpenGLはバージョン4.3でOpenGL ES 3.0互換プロファイルを扱うことができるようになっている (GL\_ARB\_ES3\_compatibility)。

WebGL 2.0は、ブラウザ上で利用できるOpenGL ES 3.0の派生規格であるが、細部に違いがある。

### OpenGL ES 3.1

OpenGL ES 3.1は2014年3月17日に発表された。ジオメトリシェーダーおよびDirectX 11 (Direct3D 11) や本家OpenGL 4.0のテッセレーションシェーダーはサポートされないが、本家OpenGL 4.3で採用されたコンピュートシェーダーなどを導入している。3.0世代のハードウェアでもドライバーレベルのアップデートで3.1に対応可能とされる。

シェーディング言語はGLSL ES 3.1をサポートする。

なお、本家OpenGLはバージョン4.5でOpenGL ES 3.1互換プロファイルを扱うことができるようになっている (GL\_ARB\_ES3\_1\_compatibility)。

### OpenGL ES 3.2

OpenGL ES 3.2は2015年8月10日に発表された。Google Android Extension Pack (AEP) にて拡張として定義されていた機能、すなわちジオメトリシェーダーおよびテッセレーションシェーダー、そしてテクスチャ圧縮技術であるASTCのサポートが標準化されたほか、本家OpenGL 4シリーズ同等の機能が多数追加される。

シェーディング言語はGLSL ES 3.2をサポートする。

なお、本家OpenGLは2015年8月に追加されたARB拡張により、OpenGL ES 3.2互換プロファイルを扱うことができるようになっている (GL\_ARB\_ES3\_2\_compatibility)。

## ANGLE

ANGLEはGoogleによって開発・公開されている、Direct3D/デスクトップOpenGL/Vulkanといった様々なグラフィックスAPIをバックエンド実装に利用してOpenGL ES互換レイヤーを提供するオープンソースのライブラリである。

ANGLEを利用することで、ベンダーがOpenGL ESのネイティブ実装として提供しているデバイスドライバーに存在する不具合や一貫性のない動作を回避したり、OpenGL ESのネイティブ実装が提供されていないプラットフォームへのアプリケーション移植を容易にしたり、新世代の下位レベルグラフィックスAPIによりドローコール(描画命令呼び出し)のオーバーヘッドを低減することでパフォーマンスを向上したり、といったことが可能となる。

Vulkanによる実装はOpenGL ES 3.2まで完了しており、2023年9月に互換性認証が済んでいる。

OpenGL ES 1.xについては、OpenGL ES 3.0の機能を使って実装されており、OpenGL ES 3.0をサポートするすべてのバックエンドにおいて利用可能となっている。

## iOS/tvOSでの非推奨化

AppleはWWDC 2018で自社プラットフォームにおけるOpenGL/OpenCLの非推奨化を発表し、iOS 12およびtvOS 12において(サポートはまだ打ち切られないものの)OpenGL ESは非推奨APIとなった。iOSがネイティブにサポートするOpenGL ESのバージョンは3.0が最後となっている。

OpenGL ESの代替として推奨されているAPIはMetalだが、MetalはVulkan同様、OpenGL ESよりもハードウェア層に近い下位レベルのAPIであり、基本的にアプリケーションソフトウェア開発向けではなくミドルウェア開発向けである。Metal APIを利用してOpenGL ESを実現するMoltenGLライブラリ(旧称MetalGL)が Brenwill Workshop によって開発されている。

ANGLEでは、macOS/iOS向けとしてMetalをバックエンドに利用するOpenGL ES実装が存在する。OpenGL ES 2.0およびES 3.0の実装が完了している。