Skip to content

Playfield Engine Design Overview

Porting Layer

Did you know that Playfield Engine runs seamlessly on Windows, macOS, Linux, iPhone, iPad, Android, Web browsers, — and even game consoles?

The extern/StratoHAL directory contains its platform abstraction layer, which cleanly handles all platform-specific differences.

Common Components

File Description
image.c Image manipulation
stdfile.c File access via C stdio library
glyph.c Font drawing via FreeType library
wave.c OggVorbis decoder via libvorbis

Windows Layer

File Description
winmain.c wWinMain()
d3drender.c Rendering dispatch
d3d12render.cc Direct3D 12 rendering
d3d11render.cc Direct3D 11 rendering
d3d9render.cc Direct3D 9 rendering
gdirender.c GDI rendering
dsound.c DirectSound audio
dsvideo.cc DirectShow video

macOS Layer

File Description
nsmain.m main() using AppKit
GameRenderer.m Metal rendering
aunit.c Audio Unit audio

Linux and BSD Layer

File Description
x11main.c X11 main
glrender.c OpenGL rendering
asound.c ALSA audio
bsdsound.c /dev/dsp and /dev/audio audio

iOS Layer

File Description
uimain.m main() using UIKit
GameRenderer.m Metal rendering
aunit.c Audio Unit audio

Android Layer

File Description
MainActivity.java Android activity
ndkmain.c C code using Android NDK
ndkfile.c Asset accedd C code using Android NDK

SIMD Acceleration

Only enabled on x86 and x86_64 Windows target.

File Description
drawimage.h Definitions of drawing functions
avx2.c AVX2
avx.c AVX
sse42.c SSE4.2
sse4.c SSE4.1
sse3.c SSE3
sse2.c SSE2
sse.c SSE

Main Layer

The main layer consists of src/*.c files, which defines API for Playfield Engine. There are C APIs defined in src/api.c, and there are Noct wrappers defined in src/vm.c.

Tag File

Tagged file support is provided by the engine and is optionally available. Developers may define an engine to run tag file scripts.