MetalANGLE - OpenGL ESからApple Metal APIへの変換レイヤー 
GoogleのANGLEプロジェクトをフォークしたものです。Metal APIのバックエンドサポートを追加しています。Appleは2018年にOpenGL(ES)の非推奨を発表しました。そこで、MetalANGLEの目的は、OpenGL ESの描画コールをMetalの描画コールにフード内で変換することにより、OpenGL ESアプリケーションがAppleプラットフォーム上で引き続き動作するようにすることです。また、OpenGL ES & Metalの相互運用もサポートします。
2021年6月30日更新: このレポのOpenGL ES 3.0をMetalで実装するコードのほとんどは、公式の ANGLE レポにマージされています。当初、Metalのバックエンドの開発はここだけで行われていました。アップル社も修正を行っており、その変更を公式の ANGLE にマージしている最中なので、現在はそうではありません。現在の [MetalANGLEと公式ANGLEの違い] (#differences-between-metalangle-and-googles-angle) を参照してください。
MetalベースのWebGLベンチマーク(gles3-dev branchのコードをベースにした予備的なものです。)
- Metal(54fps)対ネイティブOpenGL(46fps)で20k匹の魚を描画。:
 - このベンチマークは、AMD Radeon Pro 560 GPUを使用したChromiumブラウザ上でhttps://webglsamples.org/aquarium/aquarium.htmlを実行します。.
 
現在のMetalバックエンドの実装状況 
- MetalANGLEはANGLEの公式レポに移行されました。現在のMetalANGLEと公式ANGLEの違いをご覧ください。
 - OpenGL ES 2.0 の機能は100%完成しています。
 - OpenGL ES 3.0 の状態になります。 
- [x] オクルージョンのクエリ。
 - [x] MSAA.
 - [x] 複数のレンダーターゲット (古い iOS GPU では、ピクセルストレージの制限 のため、すべての GL フォーマットがサポートされているわけではありません。問題64](https://github.com/kakashidinho/metalangle/issues/64)を参照してください)。
 - [x] 3D、アレイ、シャドウテクスチャ。
 - [x] テクスチャースウィズル (supported on iOS 13.0+, macOS 10.15+ only).
 - [x] ユニフォームバッファー。
 - [x] フェンスシンク (supported on iOS 12.0+, macOS 10.14+ only).
 - [x] ピクセルバッファオブジェクト。
 - [ ] プリミティブなリスタートMetalのプリミティブリスタートは確実に動作しません。
 - [ ] 最後に生成された頂点でフラットシェーディングを行う。Metalのデフォルトは最初の頂点です。
 - [x] フィードバックを変換する。
 
 - OpenGL ES 1.0 は使用することをお勧めしません。この実装はオリジナルの 
ANGLEプロジェクトによって積極的にメンテナンスされておらず、現在バグだらけで完全には準拠していない。 - 基本的なサンプルはすべて動作しています。
 - ANGLEのエンドツーエンドテストは、ほぼ全て合格しています. 失敗したテストの一覧を参照してください。
 - OpenGL ES 2.0コンフォーマンステストの98%に合格. 90%以上のOpenGL ES 3.0コンフォーマンステストに合格. Khronos VK-GL-CTSをご参照ください。
 - これらの拡張機能は実装されています。 
- [x] EXT_instanced_arrays/ANGLE_instanced_arrays: GLES 2.0用のインスタンスドローコール。
 - [x] OES_depth_texture.
 - [x] EXT_draw_buffers: GLES 2.0に対応した複数のレンダーターゲット。
 - [x] ANGLE_framebuffer_blit.
 - [x] APPLE_clip_distance: カスタムクリッププレーン
 
 - MGLKitユーティリティクラスが追加されました。AppleのGLKitと似たような機能を提供します。
 - Urho3Dエンジンのデモは、MetalANGLEを使用して問題なくテストされています。Urho3D's MetalANGLE integration testing branchを参照してください。
 - Irrlicht EngineのMetalANGLEサンプルとの連携。 https://github.com/kakashidinho/irrlicht.
 - Metalとの相互運用がサポートされています。Qtの例: https://github.com/kakashidinho/qml-metalangle を参照してください。
 NoGL_TRIANGLE_FAN&GL_LINE_LOOPsupport in draw calls yet.- Metalはバッファオフセットが4バイトの倍数でないことや、アトリビュートサイズの倍数でないことを許しません。したがって、サポートされていないオフセット、ストライド、および頂点フォーマットを使用する描画コールは、MetalANGLEがオンザフライで変換を行うことを余儀なくされます。
 MSAA is not supported yet.- 古いOpenGL ES 2.0のみの実装は、gles2 branchで見ることができます。
 - 対応プラットフォーム: 
- MetalANGLEは、Macの MacOS 10.13+ のみ対応しています。.
 - iOSの場合、最小サポートバージョンは iOS 9.0 です。それ以前のバージョンでは、Metalの代わりにApple OpenGL ESのネイティブ実装を使用するようになります。さらに、ほとんどのサンプルアプリは iOS11.0+ 用にコンパイルされています。そのため、10.0以下のデバイスでサンプルアプリをテストしたい場合、一部のもの(例:MGLKitSampleApp_ios9.0)を除き、実行することはできません。
 - iPhone 5以下はサポート対象外です。
 - MacCatalyst 13.0+ に対応しています。
 
 
TODO lists 
- [ ] ANGLEのすべてのテストに合格していることを確認。
 - [x] 
SupportGL_TRIANGLE_FAN&GL_LINE_LOOPby generating index buffer on the fly using Metal compute shader. - [x] 
Use compute shader to convert unsupported offsets, strides & vertex formats. - [x] 
Support MSAA. - [ ] OpenGL ES 3.0に完全対応。
 
MacOS & iOS用Metal ANGLEのビルド方法 
MetalバックエンドのDevセットアップ手順をご覧ください。
現在、便宜上、MetalANGLEは ios/xcode と mac/xcode フォルダにあるXcodeプロジェクトを使ってビルドすることもできます。このXcodeプロジェクトでは、アップルが提供するGLKitのクラスである CAEAGLContext, MGLLayer, MGLKView, GLKViewController と同様のユーティリティラッパーである MGLKit も構築されています。このライブラリを使ったiOSアプリのサンプルは MGLKitSamples.xcodeproj を開いてください。この documents には GLKit アプリを MGLKit に移植するためのいくつかのガイドが含まれています。
それでも、MetalバックエンドのDevセットアップ手順 にあるように、必要な環境と依存関係を適切に設定することが先決です。
MetalANGLEとGoogleのANGLEの相違点 
- 2021年6月以前は、Metalのバックエンドのコードの大半は 
MetalANGLEとANGLEで共有されています。 - 2021年8月~9月以降、アップルから直接 
ANGLEリポジトリにいくつかの変更が加えられる予定です。これらの変更は、開発上のコンフリクトのためMetalANGLEに含まれないかもしれません。Appleの変更のほとんどは、WebkitのWebGLの標準に役立つもので、通常の使用では最適なパフォーマンスが得られないかもしれません。Apple からの変更点は以下の通りです。- フラットシェーディングの最後の挑発頂点をサポートするために、 インデックスバッファをオンザフライで書き直しました。これは、OpenGL ES のフラットシェーディングの仕様に準拠 するのに役立ちますが、フラットシェーディングを使用する描画コールが 遅くなります。多くの使用例では、フラットシェーディングが最後の頂点と最初の頂点 のどちらを使用するかは、ユーザは気にしないでしょう。
 
 MetalANGLEは iOS をサポートし、Apple の非推奨 API であるEAGL&GLKitを模倣した MGLKit などの高レベル API を含んでいます。これらの機能はANGLEにマージされることはないでしょう。なぜならANGLEプロジェクトは近い将来 iOS をサポートする予定がないからです。