I’ll admit, I had my doubts about my initial choice of OpenGL ES:
- Is it truly as cross-platform as I hope?
- Should I have chosen Vulkan instead?
- Am I ready to sacrifice Apple’s ecosystem for the sake of this decision?
After digging deeper, I finally have some answers.

Vulkan: The Powerhouse
Is it good? In short: yes.
- It is incredibly fast,
- offers robust multi-core support,
- and is deeply hardware-oriented.
However, my primary interest is portability, and that is where Vulkan falters:
- Hardware Fragmentation: Not all GPUs support it yet.
- The Apple Wall: Apple famously dropped support for Vulkan and OpenGL in favor of their proprietary Metal API.
- GPU Specificity: It turns out Vulkan isn’t even truly cross-GPU! Implementation can vary significantly between AMD and Nvidia, for example.
- High Barrier to Entry: It is intended for driver-level programming rather than application development.
For my intentions, these drawbacks are enough to exclude it from consideration.

OpenGL ES: The Pragmatic Choice
The landscape for OpenGL ES feels much more reassuring. Here’s why:
- Ubiquity: It is implemented on almost every modern GPU and available on nearly every platform.
- Sufficient Power: It is powerful and fast enough for high-quality 3D without the “Vulkan tax”.
- The WebGL Factor: Because OpenGL ES is the foundation of WebGL, it has a massive ally: Google. As the main promoter of WebGL, Google ensures that platforms (including Apple) must maintain a pathway for these calls to work.

ANGLE: The Safety Net
Google’s ANGLE project (Almost Native Graphics Layer Engine) perfectly illustrates my point. Despite the name, it is not an “engine”, but a driver. Its primary purpose is to provide cross-platform WebGL support by acting as a translation layer. It converts OpenGL ES calls into whatever native API is available—including Metal on Apple devices.
Crucially, this translation is specifically designed for OpenGL ES only.
Even if Apple eventually removes native OpenGL support, ANGLE will still accept GLES calls and execute them on Metal or whatever comes next.
In fact, almost every modern web browser (Chrome, Edge, Firefox) uses ANGLE to render WebGL. By choosing OpenGL ES 3.2, you are essentially “piggybacking” on the same technology that keeps the entire 3D internet running.
BTW, Angle can also execute OpenGL ES calls on Vulkan (when necessary).
Summary
I am grateful that I stuck with OpenGL ES from the beginning. It wasn’t just a safe choice, it was a wise one. While I haven’t tested the Mac and iPhone builds yet, one thing is certain: with or without ANGLE, the code will work.