Phaethon

news / / 4 min read

Why Phaethon moved to Vulkan

In under a month the whole renderer moved from OpenGL to Vulkan, checked frame by frame against the old one, and the old one was deleted. What drove it was the graphics card itself.

A timeline of five dates from the September 17th decision to the October 14th removal of OpenGL, with the last one marked in gold
Twenty-seven days from the decision to the deletion of OpenGL.
renderer lines moved
70,649
OpenGL calls replaced
4,300
shaders carried over
158
decision to deletion
27 days
on this page
  1. The reason was the hardware
  2. What the measurements said
  3. Checking every pixel
  4. Two renderers, then one
  5. What one renderer buys

Every PC game talks to the graphics card through a graphics API, a shared language for asking it to draw. OpenGL is the old one, born in 1992. It is easy to speak because the graphics driver fills in what you leave out, guessing what you meant. Vulkan, from 2016, is the opposite: the program says exactly what it wants, when, and with which part of the card, and the driver guesses nothing.

OpenGOAL draws all its games with OpenGL 4.3. Until September, so did Phaethon.

The reason was the hardware

The decision was written down on September 17th in one line: ray tracing is the requirement.

Ray tracing follows light through the real scene, so a building can cast a shadow on a car the way the sun would. Modern graphics cards have hardware built for exactly that, and OpenGL cannot reach it. The same was true of the other features worth having: NVIDIA's DLSS, called directly through NVIDIA's own library with no wrapper in between, and the tensor cores that run small neural networks on the card. Vulkan reaches all of them.

Two other routes were weighed and turned down. SDL's GPU layer has no ray tracing. DirectX 12 has ray tracing but only runs on Windows, while Vulkan keeps Linux open, and macOS through a translation layer.

What the measurements said

Speed came out even. Replayed race frames cost the same on both renderers within the noise, with Vulkan the steadier of the two. The graphics card sat near 45 percent busy at 3840 by 2400, so raw speed had headroom to spare.

The biggest slowdown found along the way had nothing to do with Vulkan. A guard in the OpenGL renderer that saved and restored the card's state around every draw ate 61 to 71 percent of an OpenGL frame. Taking it out cut a busy city frame from 32.4 to 12.7 milliseconds on replay.

Checking every pixel

Moving a renderer this size by hand is how games end up with a shadow that is slightly wrong forever. So the first thing built was not Vulkan at all. It was a frame oracle: a tool that plays the same moment of the game on both renderers and compares the two pictures pixel by pixel.

The OpenGL renderer took the first step: on September 17th it moved from OpenGL 4.3 to 4.6, a transition on the way to Vulkan.

With the oracle in place, the first Vulkan device came up on the evening of September 18th. Whole frames matched OpenGL's about twelve hours later. On September 22nd Vulkan became the default for every game, with OpenGL behind it in case Vulkan failed to start, and the first release candidate shipped that way.

The same Jak X race frame twice, drawn by Vulkan on the left and as the reference it was checked against on the right
One race frame drawn twice, by Vulkan on the left and by the reference on the right: the pair the oracle compares pixel by pixel.
The same race frame dimmed, with the few hundred pixels where Vulkan and the reference differ marked in gold
Where the two disagree: a few hundred pixels out of two million.

Two renderers, then one

For three weeks both renderers lived side by side. That got expensive. The traced shadows, the upscalers and the compute passes ran only on Vulkan, and every other effect had to be written twice and judged twice.

The two could never be proven identical: a few hundred pixels out of two million always differed somewhere in a frame. So on October 13th the decision was made the other way round. Vulkan's frame became the reference that every change is checked against. On October 14th the OpenGL device came out, then its shaders and the build option that could leave Vulkan out. Asking for OpenGL now stops with a message saying why.

What one renderer buys

Even before OpenGL left, the Vulkan frame was reorganized around what Vulkan allows. Each pass now declares what it reads and writes, and the renderer works out the order and the waits between passes itself; 23 waits that had been placed by hand came out. One renderer means one set of passes to measure, one place to make faster, and no work done twice.

Alex (maintainer, and a mechanical engineer by trade)

Oct 14, 2026 · renderer · milestoneEvery post
Phaethon

Built with AI in the loop. Phaethon uses AI assistance for speed and accuracy, and holds it to the same bar as every other contribution: every change is read, tested and checked against the console before it lands.

develop 6332c399 CI green v0.2.1 Nov 4, 2026

Phaethon is an unofficial fan project. It is not affiliated with, endorsed by or associated with Sony Interactive Entertainment, Naughty Dog or the OpenGOAL project. Jak and Daxter is a trademark of Sony Interactive Entertainment. You need your own copy of each game. Icons from Lucide, ISC; JetBrains Mono under the SIL Open Font License.

Under construction

This site is still being built.

Nothing links to playphaethon.com yet, so you have found it before it is ready. Some of what it says may be wrong, out of date or attributed to the wrong source. Treat it as a work in progress until this notice is gone.