Giter Site home page Giter Site logo

cai502 / fwk Goto Github PK

View Code? Open in Web Editor NEW

This project forked from r-lyeh/fwk.2022

0.0 0.0 0.0 266.25 MB

3D game framework in C, with Luajit bindings now.

Home Page: https://bit.ly/-fwk-

C++ 27.18% C 70.51% GLSL 0.83% Lua 0.71% Shell 0.04% Python 0.01% CSS 0.04% HTML 0.69% Makefile 0.01%

fwk's Introduction

3D game framework in C, with Luajit bindings now.


Goals

  • C++. C.
  • Fast. Naive.
  • Modern. Simple.
  • Full featured. Small.
  • Rich build system. Single file.
  • Royaltie fee. Free and unlicensed.

Features ᕦ(ᐛ)ᕤ

  • Pipeline: configurable and integrated asset pipeline.
  • Embedded: single-file, all dependencies included.
  • Compiler: MSVC, MINGW64, TCC, GCC and clang.
  • Platform: Windows, Linux and OSX.
  • DS: hash, sort, array/vector, map, set.
  • Math: rand, noise, ease, vec2/3/4, mat33/34/44, quat.
  • Geometry: ray, line, plane, aabb, sphere, capsule, triangle, poly and frustum.
  • Window: windowed, soft/hard fullscreen, msaa, icon, cursor handling.
  • Input: keyboard, mouse and gamepads.
  • Script: Lua scripting, Luajit bindings.
  • Network: downloads (HTTPS) and sockets (TCP/UDP).
  • UI: color3/4, button, list, slider, toggle, checkbox, editbox, dialog, image, menus.
  • Font: TTF and TTC. Basic syntax highlighter. Unicode ranges, atlasing, I18N.
  • Image: JPG, PNG, BMP, PSD, PIC, PNM, ICO.
  • Texture: KTX/2, PVR, DDS, ASTC, BASIS, HDR, TGA.
  • Texel: Depth, R, RG, RGB, RGBA, BC1/2/3/4/5/6/7, PVRI/II, ETC1/2, ASTC.
  • Audio: WAV/FLAC, OGG/MP1/MP3, MOD/XM/S3M/IT, SFXR and MID.
  • Video: MP4, MPG, OGV, MKV, WMV and AVI.
  • Model: IQM/E, GLTF/2, GLB, FBX, OBJ, DAE, BLEND, MD3/5, MS3D, SMD, X, 3DS, BVH, DXF, LWO.
  • Render: PBR (metallic-roughness) workflow.
  • Render: Cubemaps, panoramas and spherical harmonics. Rayleigh/Mie scattering.
  • Render: Post-effects (SSAO,FXAA1/3,CRT,Contrast,Grain,Outline,Vignette...).
  • Render: 3D Anims, skeletal anims, hardware skinning and instanced rendering.
  • Render: 3D Debugdraw, batching and vectorial font.
  • Render: 2D Sprites, spritesheets, AA zooming and batching.
  • Compression: DEFLATE, LZMA, LZ4, ULZ, BALZ, BCM, CRUSH, LZW3, LZSS and PPP.
  • Virtual filesystem: ZIP, PAK, TAR and DIR.
  • Level data: JSON, JSON5, SJSON, XML.
  • Disk cache.
  • Scene handling.
  • Profiler, stats and leaks finder.
  • Documentation (wip).

Roadmap ᕕ(ᐛ)ᕗ (in order of arrival; ✱: partial support)

  • Network: NAT traversal. Socketless API, message API and pub/sub wrappers (enet/websocket).
  • Render: Materials (colors✱, textures✱, matcaps✱, videos✱, shadertoys✱). Shadertoys as post-fx✱.
  • Render: Hard/soft shadow mapping and baked lightmaps.
  • Scene: toggles on/off (billboards✱, materials, un/lit, cast shadows, wireframe, skybox/mie, collide, physics).
  • Scene: node singleton display, node console, node labels, node outlines.
  • Math: quat2, bezier, catmull.
  • Editor: gizmos✱, scene tree, property editor, load/save, undo/redo, copy/paste.
  • Level objects: volumes✱, triggers, platforms, streaming.
  • Script: DLL✱ (module->plugin/sys), Lua✱, Luajit✱, Teal✱ and TypeScript.
  • Script: Docs/Refl/Meta binding tool (during cook stage).
  • Pipeline: Extend: shaders, bindings. Per-platform✱, per-type✱, per-asset options. GIF, PKM.
  • Pipeline: Extend atlas (sprite/lightmaps). Fit packing (sprites).
  • Maybe: Font text layout and shaping, underlining, soft/hard shadows, outlines.
  • Maybe: Tiled maps and 2D spines. Sprite parallaxs.
  • Maybe: Animation pass.
  • Maybe: AI/Logic pass.
  • Maybe: Lighting pass.
  • Maybe: VM/ECS/Replication pass.
  • API: More examples. Also, less examples.
  • API: Discuss API and freeze it.
  • API: Document everything.

Gallery


Build (as static library)

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
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.

Build (as dynamic library)

  • Windows: cl fwk.c /LD /DAPI=EXPORT && cl demo.c fwk.lib /DAPI=IMPORT
  • OSX: cc -ObjC -dynamiclib -o libfwk.dylib fwk.c -framework cocoa -framework iokit
  • Test it by typing cd demos/lua && luajit demo_luajit.lua

Amalgamation

  • Split FWK into separate files by running art/tools/split.bat (or sh art/tools/split.bat in Linux/OSX).
  • Merge those files back into FWK by running art/tools/join.bat (or sh art/tools/join.bat in Linux/OSX).
  • Optionally, generate a single-header distribution by executing following script:
echo // This C file is a header that you can #include. Do #define FWK_C  > fwk-single-header.c
echo // early in **one** compilation unit to unroll the implementation. >> fwk-single-header.c
type fwk.h           >> fwk-single-header.c
echo #ifdef FWK_C    >> fwk-single-header.c
echo #pragma once    >> fwk-single-header.c
type fwk.c           >> fwk-single-header.c
echo #endif // FWK_C >> fwk-single-header.c

Extra tips

  • Dropped files into game window will be imported & saved into art/import folder.
  • Linux/OSX users can optionally install wine to use the Windows pipeline as an alternate asset pipeline (use --with-wine flag).
  • Although not recommended, you can remove the cooking stage by invoking --with-jobs=0 or by removing the art/tools folder.
  • Depending on your IDE, you might need to split all amalgamated files when debugging FWK.

Bindings

  • Luajit: Luajit bindings are provided in the fwk.lua auto-generated file.
  • Nelua: Nelua bindings provided by Rabia Alhaffar.

License

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.

Credits (Artwork + demos)

  • 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).

Credits (Tools)

Credits (Runtime)

Links

Issues Discord

Still looking for alternatives? amulet, aroma, astera, blendelf, bullordengine, candle, cave, chickpea, corange, cute, dos-like, ejoy2d, exengine, gunslinger, hate, island, juno, l, lgf, limbus, love, lovr, mini3d, mintaro, mio, opensource, ouzel, pez, pixie, punity, ricotech, rizz, tigr,

fwk's People

Contributors

r-lyeh avatar zpl-zak avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.