Part of: The Story of Morph
Morph renders its entire UI — boxes, text, images, shapes — with OpenGL 3.3. Why OpenGL instead of a game engine, Skia, Cairo, or something else?
OpenGL is simple to work with. You hand it vertices and textures and it draws them. There's no engine to learn, no scene graph, no huge framework deciding how your app works. For a solo project it's the difference between "I can build this" and "I'm fighting the tool." Easy was a feature, not a compromise.
OpenGL runs on Windows, macOS, and Linux out of the box. One rendering codebase, no per-platform renderer to write. Vulkan and DirectX would mean separate code paths per OS — OpenGL meant I could build one renderer and ship it everywhere.
OpenGL 3.3 is old enough to be everywhere and new enough to do everything Morph needs.
The choice was literally: the newest version that still works on nearly everything. That's 3.3.
Here's the part I usually don't mention first: I don't have a graphics card.
I'm developing Morph on a second-gen Intel i5 processor — from around 2011–12 — with integrated graphics. No dedicated GPU. That machine is the floor:
If it works for me, it works for the world. That's not a slogan — it's the testing strategy. Old hardware is the best performance test there is, and Morph passed it.
Layout is CPU-side (Morph's own engine), but the actual pixels are drawn on the GPU via batching — text runs, rectangles, and images grouped into a handful of draw calls per frame. That's what makes smooth scrolling and animations possible even on that old integrated chip.
No browser engine, no WebView, no huge UI framework. The renderer is a focused batch of GL calls. That's a big part of why Morph binaries are lean.
OpenGL is the v1 backend — the "it works everywhere" choice. The renderer is designed so the backend can be swapped: Vulkan, Metal, and DirectX are planned behind the same layout engine and API, selected automatically per platform. When they ship, Morph will get the newest APIs on machines that have them — while OpenGL 3.3 stays the floor that runs on everything. See Graphics APIs.