ATEMA is a modular C++17 library providing many tools for the development of 2D/3D applications.
This software is provided under MIT license. See this website or the file LICENSE.txt for more informations.
- 3D rendering with graphics API abstractions (only Vulkan for now)
- Shader representation using Abstract Syntax Trees
- Shader preprocessor (libraries management, uber shader instances)
- Custom shading language (atsl)
- Converters from atsl to other shading languages (SPIR-V and glsl for now)
- Customizable render pipelines (with pre-built deferred rendering and PBR)
- Multi-threading
Jordi SUBIRANA
Main developer, using this project to learn how rendering engines are made.
Contact: jordi.subirana@yahoo.fr
As many dependencies as possible are header-only libraries. The exhaustive list is:
- VMA : manage Vulkan memory allocations for buffers and images
- stb_image : image loading
- tinyobjloader : obj mesh loader
The rest is provided by xmake package dependencies:
This software aims to be portable and all the modules should (one day) work on Windows, Linux and Mac OSX.
For now, only Windows is fully supported.
A xmake system allow you to retrieve all ATEMA dependencies and easily build the project. You only need to download xmake from the website, and have a compatible C++17 compiler.
You can generate a project for your favorite IDE either using a command line, or running one of the predefined scripts (for example build_project_xxx.bat on Windows).
If you wish to use the command line, open a console in the project folder and run xmake project --kind=vs
for Visual Studio. The full list of tools and parameters are available on the xmake website.
If you want to manually compile ATEMA, follow those steps :
- Configure the project if needed (for example
xmake config --mode=release --arch=x64
) - Build all the targets
xmake build
Finally, to retrieve ATEMA's install files and dependencies for the current configuration :
- Install to the desired directory
xmake install --installdir=INSTALLDIR
Some screenshots will appear there soon.
I'm working on ATEMA during my spare time to learn how rendering engines are made, and create my own implementation on various systems (yes, I enjoy reinventing the wheel sometimes). I've been inspired by other persons doing the same thing, and by some projects or papers I found online. Here are some of my sources of inspiration I'd like to thank:
- Nazara Engine
- Banshee
- Vulkan tutorial
- Sascha Willems Vulkan examples
- Riccardo Loggini posts
- entt
- All open source libraries I'm using (see Dependencies section)
- And sooo much more!