Minimalist C framework for quick 3D game development.
-
C++. C. -
Fast. Naive. -
Modern. Simple. -
Full featured. Small. -
Royaltie fee. Free and unlicensed.
- OS: Windows, Linux and OSX.
- Compiler: MSVC, MINGW64, TCC, GCC and clang.
- Window: windowed, fullscreen, msaa, icon, cursor handling.
- Input: keyboard, mouse and gamepads.
- Script: Lua, bindings
and FFI. - Network: downloads (HTTPS), sockets (TCP/UDP)
and messages (enet/websocket). - UI: color3/4, button, list, slider, toggle, checkbox, editbox, dialog, menus.
- Math: rand, noise, ease, vec2/3/4, mat33/34/44, quat
and quat2, bezier, catmull. - Geometry: ray, line, plane, aabb, sphere, capsule, triangle, poly and frustum.
- Image: JPG, PNG, TGA, BMP, PSD, HDR, PIC, PNM
and GIF. - Texture: BCn 1/2/3/
4/5/6/7, DDS, KTX, PVR, PKM, ETC. - Audio: WAV, MOD, XM, FLAC, OGG, MP1, MP3, MID
and SFXR. - Video: MP4, MPG, OGV, MKV, WMV and AVI.
- Model: IQM, GLTF/2, FBX, OBJ, DAE, BLEND, MD3, MD5, MS3D, SMD, X, 3DS, BVH, DXF, LWO.
- Render: 2D Sprites, spritesheets, batching,
tiled and 2D Spines. - Render: 3D Anims, skeletal anims and hardware skinning.
- Render: 3D Debugdraw, batching and vectorial font.
- Render: Cubemaps, panoramas and spherical harmonics. Rayleigh/Mie scattering.
- Render: Post-effects (SSAO,FXAA1/3,CRT,Contrast,Grain,Outline,Vignette...)
and shadertoys. - Compression: DEFLATE, LZMA, LZ4, ULZ, BALZ, BCM, CRUSH, LZW3, LZSS and PPP.
- Virtual filesystem: ZIP, PAK, TAR and DIR.
- Disk cache.
- Scene handling.
- Integrated asset pipeline.
- Profiler, stats and leaks finder.
- Level data: JSON, JSON5, SJSON, XML.
- Network: message api and pub/sub wrappers (enet/websocket).
- Script: DLL
*
, Lua*
, Teal and TypeScript. - Script: Refl/meta binding tool (during cook stage).
- Level editor: gizmos
*
, scene tree, property editor, load/save, undo/redo, copy/paste. - Level objects: volumes
*
, triggers, platforms, streaming. - Render: Materials (colors, textures
*
, matcaps*
, videos*
, shadertoys*
). - Render: Shadow mapping and baked lightmaps.
- Pipeline: Make asset pipeline configurable. Extend: shaders, bindings, textures. Per-type, per-asset options.
- Maybe: Animation pass.
- Maybe: AI/Logic pass.
- Maybe: Lighting/PBR pass.
- Maybe: VM/ECS/Replication pass.
- API: More examples.
- API: Documentation. Generator
*
. Generator during cook stage. - API: Review API, clean it up and lock it.
Type MAKE.bat
(Win) or sh MAKE.bat
(Linux/OSX) to build everything. Alternatively,
echo Windows (vc+tcc) && cl demo.c fwk.c
echo Windows (mingw64) && gcc demo.c fwk.c -o demo -w -lws2_32 -lgdi32 -lwinmm -ldbghelp -std=c99
echo Linux (gcc+clang+tcc) && cc demo.c fwk.c -o demo -w -lm -ldl -lpthread
echo OSX (gcc+clang) && cc demo.c -ObjC fwk.c -o demo -w -framework cocoa -framework iokit
- Note: TCC is partially supported on Windows+Linux. Beware, no threading.
- Note: FWK as DLL:
cl fwk.c /LD /DAPI=EXPORT
, thencl demo_dll.c fwk.lib /DAPI=IMPORT
.
- Split FWK into separate files by running
art/tools/split.bat
(orsh art/tools/split.bat
in Linux/OSX). - Merge those files back into FWK by running
art/tools/join.bat
(orsh art/tools/join.bat
in Linux/OSX). - Optionally, generate a single-header distribution by executing following script:
type fwk.h > fwk-single-header.h
echo #ifdef FWK_C >> fwk-single-header.h
echo #pragma once >> fwk-single-header.h
type fwk.c >> fwk-single-header.h
echo #endif // FWK_C >> fwk-single-header.h
- Dropped files into game window will be imported & saved in
art/import
folder. - Linux/OSX users can optionally install wine to use the Windows pipeline as an alternate asset pipeline.
This software is released into the public domain.
Also dual-licensed as 0-BSD or MIT (No Attribution) for those countries where public domain is a concern (sigh).
Any contribution to this repository is implicitly subjected to the same release conditions aforementioned.
- FMS_Cat, for nicest VHS/VCR shader around (MIT).
- Goblin165cm, for witch 3D model (CC BY 4.0).
- Nanofactory, for kgirls01 3D model (CC BY-NC-ND 4.0).
- Quaternius, for the lovely 3D robots (CC0).
- Rxi, for lovely sprites & cats demo (MIT).
- wwwtyro, for nicest rayleigh/mie scattering shader around (CC0).
- Assimp authors, for assimp (BSD3).
- Bernhard Schelling, for tml.h (Zlib) and tsf.h (MIT).
- Krzysztof Gabis, for split.py/join.py (MIT).
- Mattias Gustavsson, for mid.h (PD).
- Tor Andersson, for assiqe.c (BSD).
- Lee Salzman, for iqm.cpp (PD).
- Barerose, for swrap (CC0).
- Camilla Löwy, for glfw3 (Zlib).
- Dave Rand for ppp (PD).
- David Herberth, for glad generated code (PD).
- David Reid, for miniaudio (PD).
- Dominic Szablewski, for pl_mpeg (MIT).
- Dominik Madarász, for json5 parser (PD).
- Eduard Suica, for tlse (PD).
- Haruhiko Okumura for lzss (PD).
- Igor Pavlov for LZMA (PD).
- Ilya Muravyov for bcm, balz, crush, ulz, lz4x (PD).
- Jon Olick, for jo_mp1 and jo_mpeg (PD).
- Joonas Pihlajamaa, for JUnzip library (PD).
- Joshua Reisenauer, for jar_mod and jar_xm (PD).
- Lee Salzman, for IQM spec & player (PD).
- Lee Salzman, V.Hrytsenko and D.Madarász, for enet (MIT).
- Libtomcrypt, for libtomcrypt (Unlicense).
- Lua authors, for Lua language (MIT).
- Mattias Gustavsson, for thread.h and https.h (PD).
- Micha Mettke, for nuklear (PD).
- Rich Geldreich, for miniz (PD).
- Ross Williams for lzrw3a (PD).
- Samuli Raivio, for bq_websocket (PD).
- Sean Barrett, for stb_image, stb_image_write and stb_vorbis (PD).
- Sebastian Steinhauer, for sts_mixer (PD).
- Stefan Gustavson, for simplex noise (PD).
- Tomas Pettersson, for sfxr (PD).
- Special thanks to @ands (PD), @barerose (CC0), @datenwolf (WTFPL2), @evanw (CC0), @glampert (PD), @krig (CC0), @sgorsten (Unlicense) and @vurtun (PD) for their math libraries.
Still looking for alternatives? amulet, aroma, astera, blendelf, bullordengine, candle, cave, chickpea, corange, cute, ejoy2d, exengine, gunslinger, hate, island, juno, l, lgf, limbus, love, lovr, mini3d, mintaro, mio, opensource, pez, pixie, punity, ricotech, rizz, tigr,