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.4 🐥)

Made by: Sebastián Valdés

🍗 Poyo Engine VX

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

Built from scratch out of a passion for graphics and engine development. The real challenge: supporting modern and legacy APIs alike, from PC to Nintendo Switch and eventually GameCube.

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 1.4 🚧 WIP 0.4 🐥
🎮 Console
Platform API Ver. Status Since
Switch 4.3 0.1 🥚
Switch untested
GameCube GX 1.0 🚧 WIP 0.3 🐤
3DS citro3d 📋 -

Rendering Architecture

A 2-layer rendering architecture. Both layers abstract over the graphics APIs, so one codebase runs on every platform unchanged.

The low-level layer gives full GPU control (shaders, pipelines, compute); the high-level layer offers pre-built materials that run everywhere, even the GameCube’s fixed-function GX (no programmable shaders, plugs in via TEV).

RHI (Render Hardware Interface)

Low-level, full GPU control

Vulkan 1.3OpenGL 4.6Metal

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

↓ Runs on

Cross-Platform Renderer

High-level, simpler but more limited

VulkanOpenGLMetalGX

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 build on the RHI; the Cross-Platform Renderer just pre-configures it for you.

* GX exposes a partial RHI (buffers, textures) but no Shaders, Compute or Programmable Pipelines, so GameCube can’t run the low-level path.

* Metal is not native yet: on macOS, MoltenVK translates Vulkan to Metal, so Mac uses the Vulkan backend.

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

Universal intermediate

Consumed directly - SPIR-V binary

Vulkan native
OpenGL PC GL_ARB_gl_spirv
Metal via MoltenVK

Transpiled to GLSL

SPIRV-CrossGLSLOpenGL Switch

One source, one intermediate, every backend. Write in GLSL 450, route through SPIR-V, run everywhere. Shader #include and live reload built into the editor.

Key Features

Vulkan 1.3

Full backend with VMA, dynamic rendering, sync2, batched submit, and 2 frames in flight.

OpenGL 4.6

DSA-based backend from 3.3 to 4.6, consuming SPIR-V via GL_ARB_gl_spirv. Also runs on Switch (4.3).
🧩

Modular Renderer

ECS-driven stage stack plus a high-level renderer (HLRenderer) sharing one path across every backend.
🎨

Material System

Shader families with UBO-schema reflection and .poyo_material disk authoring with per-instance overrides.
💡

Lighting & Shadows

Point, spot, and area (LTC) lights with PBR bloom. Cascaded, point (cubemap), and dual-paraboloid shadows with multi-caster bias.
🎭

Deferred Shading

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

HDR Pipeline

SRGB output on UNORM swapchains with BC6H and ASTC HDR textures and ACES tonemapping.
🚀

GPU-Driven Rendering

Dispatch and indirect compute, multi-draw indirect, GPU instancing, and SSBO-based frustum culling.
🔷

Geometry Pipeline

Mesh shaders (OpenGL NV + Vulkan EXT) and hardware tessellation for GPU-generated terrain.
🗂️

Scene System

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

Skeletal Animation

Component Animator with SSBO linear blend skinning, shadow casting, and bone/socket debug.
🔤

Text Rendering

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

Compressed Textures

KTX2 loading with ASTC, BC / BC6H, and ETC2 formats, plus runtime mip generation.
🥚

Asset Packs

.poyoegg virtual file system: ship loose files or one packed archive. Works on desktop and Switch (romfs).
🛠️

Editor

10+ dockable panels: shader editor and playground with live reload, theme system, gizmos, and GPU entity picking.
📊

GPU Profiler & Capture

Scoped GPU timing sections with real-time visualisation, plus Nsight and RenderDoc capture.

Work in Progress

🎮GameCube GXPartial RHI + TEV renderer. Renders lit, textured meshes with Z-buffer shadows on Dolphin.
🍎macOSAll demos running via MoltenVK (Vulkan on Metal). Native Metal backend planned.
🕸️RenderGraph + BindlessThe v0.4 focus. Render graph with automatic pass scheduling and barriers, plus bindless textures via descriptor indexing.

Development Phases

🥚

v0.1 Egg

Apr - Dec 2025

Foundations

🐣

v0.2 Hatchling

Jan - Mar 2026

Breaking out

🐤

v0.3 Chick

Mar - Jul 2026

Learning fast

🐥

v0.4 Fledgling

Jul 2026 - now

RenderGraph + Bindless

🪶

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

Based on: Original

Instancing

Instancing

Based on: Original

Compute Shader

Compute Shader

Based on: Original

Compute Mesh

Compute Mesh

Based on: 3D Graphics Rendering Cookbook

Textures

Textures

Based on: LearnOpenGL - Textures

Grass

Grass rendering

Based on: The Book of Shaders

v0.2 🐣 Hatchling

Normal Mapping

Normal Mapping

Based on: LearnOpenGL - Normal Mapping

Normal Visualiser

Normal Visualiser with geometry shader

Based on: LearnOpenGL - Geometry Shader

Parallax Mapping

Parallax Mapping

Based on: LearnOpenGL - Parallax Mapping

Outlining

Stencil-based outlining

Based on: LearnOpenGL - Stencil Testing

Blend Modes

Blend Modes

Based on: Original

Shadow Mapping

Shadow Mapping

Based on: LearnOpenGL - Shadow Mapping

Point Shadows

Point Shadows with cubemap

Based on: LearnOpenGL - Point Shadows

Dual Paraboloid Shadows

Dual Paraboloid Shadows

Based on: Graphics Runner - Dual Paraboloid Shadow Maps

Cascaded Shadows

Cascaded Shadow Maps

Based on: LearnOpenGL - CSM / GPU Gems 3 Ch.10

Deferred Shading

Deferred Shading

Based on: LearnOpenGL - Deferred Shading

Interior Mapping

Interior Mapping with parallax cubemap

Based on: Emil Persson (Humus) / Joost van Dongen

Mesh Shaders

Mesh Shaders

Based on: Khronos VK_EXT_mesh_shader / NVIDIA

Asteroid Field

Asteroid Field with GPU culling

Based on: Original

GPU Terrain

GPU Terrain with tessellation

Based on: LearnOpenGL - Tessellation

Water Caustics

Water Caustics

Based on: Evan Wallace - Realtime Caustics in WebGL

Infinite Grid

Infinite Grid

Based on: 3D Graphics Rendering Cookbook / Ben Golus

v0.3 🐤 Chick

Emissive (PBR Bloom)

Emissive with PBR Bloom

Based on: CoD: Advanced Warfare (Siggraph 2014)

Engine Primitives

Engine Primitives

Based on: Original

Hex Materialisation

Hexagonal Tiling materialisation

Based on: BigWings (Shadertoy)

Hex Emissive

Hexagonal Emissive effect

Based on: BigWings (Shadertoy) / CoD:AW Bloom

Hex Emissive (Animated)

Hexagonal Emissive animated

Based on: BigWings (Shadertoy) / CoD:AW Bloom

Text 2D

2D Text Rendering

Based on: LearnOpenGL - Text Rendering

Text 3D

3D Text in world space

Based on: Original

Text SDF

SDF Text Rendering

Based on: Original

Area Lights

Area Lights with LTC

Based on: LearnOpenGL - Area Lights / Heitz et al. (LTC)

Alpha to Coverage

Alpha to Coverage anti-aliased alpha test

Based on: Ben Golus - Anti-aliased Alpha Test

Skeletal Animation

Skeletal Animation with linear blend skinning

Based on: LearnOpenGL - Skeletal Animation / glTF Linear Blend Skinning

HDR Environment

HDR Environment skybox with BC6H

Based on: Original (Polyhaven HDR / ACES)

Refraction (IOR)

Refraction via Index of Refraction

Based on: 3D Graphics Rendering Cookbook (Ch.7)

Eye Adaptation

Eye Adaptation auto-exposure

Based on: 3D Graphics Rendering Cookbook (Ch.10)

Shader Clock

Shader Clock cost and warp divergence

Based on: GL_ARB_ / VK_KHR_ / SPV_KHR_shader_clock + KHR_shader_subgroup

Switch IR Camera

Switch IR Camera (Joy-Con sensor)

Based on: Original (Joy-Con IR Sensor) - Switch Exclusive