API & Extension Review - PilotLightTech/pilotlight GitHub Wiki

Table of Contents

Status

Status Legend

The status symbols found below will be used throughout this document, but I will further explain them here.

Symbol Description Notes
✔️ 1.0 API is stable (will not be broken) but can be added to
🟢 Review Needed Candidate for 1.0. Just need more eyes on the API
🟡 Beta Most of the API is stable but there are known changes needed
🔴 Active Development API is under active development and subject to frequent changes
:memo: Documentation Needed This doesn't hold up 1.0
:traffic_light: Tests Needed This doesn't hold up 1.0

Core

The Core of Pilot Light is very small and entirely contained in the src directory. The Core APIs are found in the pl.h header file and are required by any Pilot Light application. The current status of these APIs can be found in the table below:

API Status Description
Base platform agnostic systems
API Registry ✔️ :memo: :traffic_light:
Data Registry ✔️ :memo: :traffic_light:
Extension Registry ✔️ :memo: :traffic_light:
IO ✔️ :memo: :traffic_light: keyboard + mouse + event input/output

Extensions

If some functionality can be an extension, then it should be. Most of the real work is put into the extensions which are found in the extensions directory. The Standard extensions are those included directly in the Pilot Light code base. The current status of the APIs provided by these extensions can be found in the table below:

API Status File Description
Log ✔️ :memo: :traffic_light: pl_log_ext.h simple logger
Profile ✔️ :memo: :traffic_light: pl_profile_ext.h simple profiler
File ✔️ :memo: :traffic_light: pl_file_ext.h simple binary file API
Library ✔️ :memo: :traffic_light: pl_library_ext.h shared library loading
Window ✔️ :memo: :traffic_light: pl_window_ext.h simple windowing
Network ✔️ :memo: :traffic_light: pl_network_ext.h UDP/TCP API
Threads ✔️ :memo: :traffic_light: pl_threads_ext.h basic thread & synchronization primitives
Atomics ✔️ :memo: :traffic_light: pl_atomics_ext.h basic atomic primitives
Virtual Memory ✔️ :memo: :traffic_light: pl_virtual_memory_ext.h virtual memory access
String Intern ✔️ :memo: :traffic_light: pl_string_intern_ext.h string interning
Image ✔️ :memo: :traffic_light: pl_image_ext.h image loading
Stats ✔️ :memo: :traffic_light: pl_stats_ext.h statistics
Rect Pack ✔️ :memo: :traffic_light: pl_rect_pack_ext.h rectangle packing
Job ✔️ :memo: :traffic_light: pl_job_ext.h basic job system
GPU Allocators ✔️ :memo: :traffic_light: pl_gpu_allocators_ext.h GPU allocators
Shader ✔️ :memo: :traffic_light: pl_shader_ext.h shader compiling
Draw ✔️ :memo: :traffic_light: pl_draw_ext.h 2D/3D drawing
Console ✔️ :memo: :traffic_light: pl_console_ext.h
Screen Log ✔️ :memo: :traffic_light: pl_screen_log_ext.h
UI ✔️ :memo: :traffic_light: pl_ui_ext.h debug UI
Profile ✔️ :memo: :traffic_light: pl_profile_ext.h profiler
Graphics ✔️ :memo: :traffic_light: pl_graphics_ext.h graphics API abstraction over Vulkan & Metal 2.0
Draw Backend ✔️ :memo: pl_draw_backend_ext.h draw backend using pl_graphics_ext.h
Tools ✔️ :memo: pl_tools_ext.h
BVH 🟡 :memo: :traffic_light: pl_bvh_ext.h
Collision 🟡 :memo: :traffic_light: pl_collision_ext.h
Physics 🟡 :memo: :traffic_light: pl_physics_ext.h
Gizmo 🟡 :memo: pl_gizmo_ext.h
ECS 🟡 :memo: :traffic_light: pl_ecs_ext.h
ECS Tools 🟡 :memo: pl_ecs_tools_ext.h
Model Loader 🟡 :memo: :traffic_light: pl_model_loader_ext.h model loaders
Resource Manager 🟡 :memo: :traffic_light: pl_resource_ext.h resource manager
Renderer 🔴 :memo: :traffic_light: pl_renderer_ext.h reference renderer

Libraries

The Libraries are referring to the STB style libraries found in the libs directory. These are completely standalone libraries. The status of this can be seen below:

Library Status File Description
Data Structures ✔️ :traffic_light: pl_ds.h minimal data structures
JSON ✔️ :traffic_light: pl_json.h JSON parser
Log ✔️ :traffic_light: pl_log.h logger
Math ✔️ :traffic_light: pl_math.h math
Memory ✔️ :traffic_light: pl_memory.h memory allocators
Profiler ✔️ :traffic_light: pl_profile.h profiler
STL ✔️ :traffic_light: pl_stl.h STL File parser
String ✔️ :traffic_light: pl_string.h string utilities
Testing ✔️ pl_test.h minimal testing library