Version: 0.0.1, "Just experimenting".
A repository I decided to make just for fun to keep software engineering sharp while grinding throu my bachelor's math classes (don't get me wrong, I love Calculus and Linear Algebra, but there isn't a lot of programming in there). Also to try out a few things:
- Post-Modern C, a.k.a C but we use modules (better compile times, no header hell), namespaces (good for organization), default function values (usefull for when the parameter has a commonly used value) and templates (when justifiable, such as data structures). Also STL for prototyping stuff while we don't have our own custom data structures.
- Building a platform layer from scratch (less bloat);
- CPU rendering, because GPU programming is an absolute mess, so it's justifiable if it's not requiered (a.k.a nice graphics);
- Data oriented design (SIMD go brrrrr) and compression oriented programming (check sources);
- Creating a simple puzzle game (because I've been playing a lot of those recently).
Please don't use this as an actuall engine, this is just a reference/POC/pet project.
Clone the repo and enter it with:
- A C++ compiler that supports modules and modularization of system headers (I've been using g++ 16.1.0, it's likely not needed but it's what has been working for me)
- GNU Make
- If building with GNU + Linux with X11 windowing,
lX11is also requiered
Then for a default debug build:
make -j$(nproc)For a default release build:
make -j$(nproc) MODE=releaseConfiguration details: Defaults:
- C++ compiler:
g++. If you change make sure to also changeCXX_MODon the makefile The defaults below can be changed withOPTION_NAME=value: - TARGET:
core. Other:editor, test, benchmark(all unimplemented) - MODE:
debug. Other:release - WINDOWING (only used for GNU + Linux):
X11. Other:Wayland(being implemented) - OS:
gnu_linux. Other:windows(unimplemented)
A sample config for Focus Editor is provided along with the project, only requiering you to copy it to where your focus projects are and setup the absolute path to the root (compiles with F1 and runs with F2).
Profiling is done using perf.
Check sources.
Progress for each version is tracked at todo.
By version I mean feature tracking, each version has a goal and I update based on that, so a version may have parts (such as "0.0.1 beta p2").
Only the progress tab of the previous version is stored. I don't think a changelog is requiered since it's a hobby project.