Awesome
libfwk
WTF is libfwk?
FWK is a sweet (IMVHO) abbreviation for framework. It is basically a set of classes and functions which I use in most of my projects (mostly game-related). It's trying to be light, super easy to use and performant where it matters.
Features
- Vulkan & SDL2 based
- Easy to use interfaces (trying to be as intuitive as possible)
- Doesn't use C++ exceptions
- Supported platforms: Ubuntu 22.04, Windows (requires VS 2022 with LLVM toolset)
TODO: more details
Examples & projects based on libfwk
- Some examples are available in src/test/ and src/tools.
- FreeFT https://github.com/nadult/freeft
- LucidRaster https://github.com/nadult/lucid
Building
libfwk is written in C++20, so it requires a fairly new C++ compiler, preferably Clang. libfwk can be easily compiled in Ubuntu 22.04 and under Windows (github actions are provided).
Windows
libfwk requires Visual Studio 2022 with LLVM toolset. tools/install_deps.py will download all the necessary dependencies into a specified folder. libfwk project files expect this folder to be 'C:/libraries/x86_64'. You can change that in windows/shared_libraries.props. To build it, simply open windows/libfwk.sln in Visual Studio and run build.
Ubuntu
Several external dependencies have to be installed, before building libfwk. 'Install dependencies' step in test-linux job (.github/workflows/test.yml) is a good reference of how to install them.
To compile simply run make. There is a basic description of the options that you can pass to make at the beginning of Makefile & Makefile-shared.
Examples:
$ make MODE=release-paranoid COMPILER=clang++-17 STATS=true -j12
$ make MODE=release-paranoid print-stats print-variables
$ make MODE=debug-nans clean
$ make clean-all
Dependencies
External dependencies
-
Vulkan SDK
https://www.lunarg.com/vulkan-sdk/
Only shaderc, vulkan headers & loader is actually used -
zlib
-
freetype2
http://www.freetype.org/ -
libogg, libvorbis
https://xiph.org/ogg/ https://xiph.org/vorbis/ -
OpenAL
https://www.openal.org/ -
dear imgui (optional)
Included as a git submodule in extern/imgui/.
Menu module & perf::Analyzer will only be compiled if imgui is present.
https://github.com/ocornut/imgui -
libdwarf (optional, linux-only)
Included dependencies
-
STB_image && STB_dxt && STB_image_resize https://github.com/nothings/stb
-
rapidxml
included in extern/rapidxml/, licensed under BSL 1.0.
http://rapidxml.sourceforge.net/ -
boost::polygon::voronoi
included in extern/boost_polygon/, licensed under BSL 1.0.
http://www.boost.org/ -
Volk
included in extern/volk/, licensed under MIT license. https://github.com/zeux/volk
License
Whole library is licensed under Boost Software license.
If You found this library useful, please contact the author (nadult (at) fastmail (dot) fm).
Any kind of feedback is greatly appreciated.