🧠 Project Details
OP5U 2D Engine is my attempt to build a full 2D game engine from scratch — no Unity, no Godot, no middleware — just raw OpenGL ES 3.1 on the Orange Pi 5 Ultra.
The Orange Pi 5 Ultra packs an RK3588S SoC with an 8-core CPU and a Mali-G610 GPU.
That GPU is fully supported by the open-source Panfrost driver in Mesa, which means we finally have a small ARM board that can run real hardware-accelerated graphics without binary blobs.
I wanted to see what it would take to push that GPU directly — so I wrote a renderer in C++17 using SDL2 and GLES 3.1, targeting pure performance and simplicity.
The result is an engine that can draw thousands of sprites at 60 FPS with instancing, full camera control, and smooth continuous rotation.
✳ Current Features
-
GPU instanced sprite rendering (each sprite is a hardware instance)
-
OpenGL ES 3.1 shaders written by hand
-
Pan, zoom, and vsync toggle
-
Per-sprite rotation and dynamic UVs
-
FPS logging and real-time performance readouts
-
A simple texture atlas system (512 × 512 pixels)
🧩 Why Build This?
Most people use pre-built engines that abstract away the GPU.
I wanted to understand how far an inexpensive single-board computer could go when you don’t hide the hardware.
The Orange Pi 5 Ultra turned out to be a perfect playground — enough horsepower to hit 60 FPS, but low-level enough that you still feel every draw call.
🔮 What’s Next
The next milestone is sprite animation — Pac-Man’s mouth opening and closing using UV frame switching, ghost blinking, and time-based flipbooks.
From there: tilemaps, parallax scrolling, sound, and a small playable demo called Pac Field.
🛠 Build Environment
-
Ubuntu 22.04 (Jammy) Desktop GNOME on NVMe
-
Mesa 23.x Panfrost driver
-
SDL2 2.0.5 + SDL_image
-
CMake + GCC 13.3
💡 The Goal
Make a full, open-source 2D engine that others can use as a foundation for ARM-based indie projects — something that runs on an Orange Pi, Raspberry Pi 5, or even an old Chromebook.
No binary drivers, no proprietary toolchains — just open graphics, open code, and real-time performance.
Jonathan Stein




