Sebastián Valdés

Category: Graphics Programming

Language: C++23

Graphic APIs: Vulkan 1.3 & OpenGL 4.6

Platforms: PC & Nintendo Switch

Status: In Active Development (v0.3 🐤)

Made by: Sebastián Valdés

🍗 Poyo Engine VX

PoyoVX is a multi-backend game engine and successor to Poyo Engine (2022-2023). The name says it all: V for Vulkan, X for GX (the GameCube graphics API).

Built from scratch out of a passion for computer graphics and engine development. Supporting both modern and legacy APIs is the challenge that drives this project. Seeing the engine run on a Nintendo Switch, and eventually on a GameCube, is what keeps the motivation going.

Platform Support

🖥️ PC
Platform API Ver. Status Since
Windows 1.3 0.1 🥚
Windows 4.6 0.1 🥚
Steam Deck 1.3 | 4.6 0.2 🐣
Mac 📋 -
🎮 Console
Platform API Ver. Status Since
Switch 4.3 0.1 🥚
Switch untested
GameCube GX 1.0 🚧 WIP 0.3 🐤
3DS citro3d 📋 -

Rendering Architecture

The engine is built around a two-layer rendering architecture. Neither layer exposes raw API calls. Both are abstractions over the underlying graphics APIs. The same code runs on all supported platforms without any changes.

The low-level layer gives full control over the GPU (shaders, pipelines, compute), while the high-level layer provides pre-built materials and shading models for cross-platform rendering. The challenge of the high-level layer is making it work across very different hardware: from modern Vulkan on PC to the GameCube’s fixed-function GX with no programmable shaders. The GameCube cannot use the low-level pipeline, so it plugs in at the high-level layer with its own GX Renderer that configures TEV stages directly.

RHI (Render Hardware Interface)

Low-level, full GPU control

Vulkan 1.3OpenGL 4.6

You manage everything: Shaders, Pipelines, Command Lists, Compute, Bindings. Only for programmable GPUs.

↓ Runs on

Cross-Platform Renderer

High-level, simpler but more limited

VulkanOpenGLGX

Pick a Material, set Textures, call Draw. The renderer handles the rest. Like SDL but for 3D. Works everywhere, including GameCube via TEV.

↓ Runs on

Both layers are built on top of the RHI. The Cross-Platform Renderer pre-configures it for you.

GX has a partial RHI (buffers, textures) but lacks Shaders, Compute, and Programmable Pipelines, so the low-level pipeline cannot run on GameCube.

Shader Compilation Pipeline

All shaders are written in GLSL Vulkan 450 as the single source language. The engine compiles them to the right target at runtime:

GLSL Vulkan 450

Source language

glslang

GLSL → SPIR-V

SPIR-V

Intermediate

VulkanDirect use
OpenGL PCGL_ARB_gl_spirv
↓ SPIRV-CrossOpenGL SwitchCross-compiled to GLSL

Write once in GLSL 450, compile everywhere. Supports shader #include and live reloading in the editor.

Key Features

Vulkan 1.3

Full backend with VMA, Dynamic Rendering, GPU profiling, and SPIR-V shaders.

OpenGL 4.6

DSA-based backend with compatibility from 3.3 to 4.6. Runs on PC and Nintendo Switch (4.3).
🎮

Nintendo Switch

All demos running natively via EGL with touch input and custom logger.
📊

GPU Profiler

Scoped GPU timing sections with real-time performance visualisation in the editor.
🎭

Deferred Shading

G-buffer with multiple render targets and configurable blend modes on both APIs.
🌑

Shadows

Cascaded shadow maps, point light shadows (cubemap), and dual paraboloid shadows.
💡

Lighting

Point, spot, and area lights (LTC). PBR bloom inspired by Call of Duty: Advanced Warfare.
📦

Indirect & Instancing

Multi Draw Indirect, GPU instancing, and SSBOs for efficient batched rendering.
🔷

Mesh Shaders

GPU-driven mesh processing via OpenGL (NV_mesh_shader) and Vulkan (EXT_mesh_shader).
🖥️

Compute Pipeline

Dispatch and indirect compute on both APIs. Used for GPU culling and particle systems.
🗂️

Scene System

ECS powered by entt with YAML serialisation, undo/redo action history, and GLTF import.
🔤

Text Rendering

2D, 3D, and signed distance field (SDF) text rendering via FreeType.

Work in Progress

🎮GameCube GXPartial RHI backend + TEV-based renderer. Code written, building for hardware next.
🛠️Editor10 panels including shader editor with live reload, theme system, and entity picking.
📦KTX2 TexturesASTC working on Switch. BC and ETC2 compression still in progress.

Development Phases

🥚

v0.1 Egg

Apr–Dec 2025

Foundations

🐣

v0.2 Hatchling

Jan – Mar 2026

Breaking out

🐤

v0.3 Chick

Mar 2026 – now

Learning fast

🐥

v0.4 Fledgling

TBD

TBD

🪶

v0.5 Feather

TBD

TBD

🐔

v0.6 Chicken

TBD

TBD

🐓

v0.7 Rooster

TBD

TBD

🔥

v0.9 Phoenix

TBD

TBD

🍗

v1.0 Poyo

TBD

Perfection

🖼️ Poyo GPU Samples

A growing collection of standalone GPU demos. Each sample demonstrates a specific engine feature using the low-level RHI pipeline, and serves as both a test and a learning reference.

v0.1 🥚 Egg

Hello Triangle

Hello Triangle

Instancing

Instancing

Compute Shader

Compute Shader

Compute Mesh

Compute Mesh

Textures

Textures

Grass

Grass rendering

v0.2 🐣 Hatchling

Normal Mapping

Normal Mapping

Normal Visualiser

Normal Visualiser with geometry shader

Parallax Mapping

Parallax Mapping

Outlining

Stencil-based outlining

Blend Modes

Blend Modes

Shadow Mapping

Shadow Mapping

Point Shadows

Point Shadows with cubemap

Dual Paraboloid Shadows

Dual Paraboloid Shadows

Cascaded Shadows

Cascaded Shadow Maps

Deferred Shading

Deferred Shading

Interior Mapping

Interior Mapping with parallax cubemap

Mesh Shaders

Mesh Shaders

Asteroid Field

Asteroid Field with GPU culling

GPU Terrain

GPU Terrain with tessellation

Water Caustics

Water Caustics

Infinite Grid

Infinite Grid

v0.3 🐤 Chick

Emissive (PBR Bloom)

Emissive with PBR Bloom

Engine Primitives

Engine Primitives

Hex Materialisation

Hexagonal Tiling materialisation

Hex Emissive

Hexagonal Emissive effect

Hex Emissive (Animated)

Hexagonal Emissive animated

Text 2D

2D Text Rendering

Text 3D

3D Text in world space

Text SDF

SDF Text Rendering

Area Lights

Area Lights with LTC