| 1 | ## Zydeco ([Fractal tag](https://joshstock.in/blog/opengl-fractal-explorer)) |
| 2 |
|
| 3 | Hobby project/experiment in C++, graphics programming, and world generation. |
| 4 |
|
| 5 | ### Building |
| 6 |
|
| 7 | Run `./zydeco.sh` to compile, build, and run. Requires `CMake` and a |
| 8 | `C++20`-capable compiler, as well as the dependencies below. Executable is |
| 9 | outputted at `build/zydeco` in the project root directory. |
| 10 |
|
| 11 | Zydeco depends upon the following C/C++ libraries: |
| 12 |
|
| 13 | | Library | Purpose | Source | |
| 14 | | ------- | ------- | ------ | |
| 15 | | `fmt` | String formatting for debug output messages | `libfmt-dev` | |
| 16 | | `cpptrace` | Producing stack traces for fault output | [GitHub](https://github.com/jeremy-rifkin/cpptrace) | |
| 17 | | `SDL2` | Cross-platform solution for creating and managing windows, OpenGL contexts | `libsdl2-dev` | |
| 18 | | `GL` | OpenGL | `libgl-dev` | |
| 19 | | `gl3w` | OpenGL loader with extensions enabled | [GitHub](https://github.com/skaslev/gl3w/blob/master/gl3w_gen.py) | |
| 20 | | `imgui` | Immediate-mode GUI, used for debug menus | [GitHub](https://github.com/ocornut/imgui) (docking branch) | |
| 21 |
|
| 22 | **Notes on installing dependencies:** |
| 23 |
|
| 24 | * `cpptrace` is included by `CMakeLists.txt` as a system-wide dependency. You can |
| 25 | either install it this way by the instructions in the linked repo, or remove |
| 26 | its use in `src/util/Fault.cpp` and the requirement in `CMakeLists.txt`. |
| 27 | * **`gl3w` should be run in a new directory `lib/gl3w` with `python3 gl3w_gen.py --ext`** |
| 28 | * Install imgui with `git clone --branch docking --single-branch --depth=1 https://github.com/ocornut/imgui.git` to `lib/imgui` |
| 29 |
|
| 30 | Depending on how your package manager installed SDL2, there might be a |
| 31 | disparity for SDL2 `#include`s between imgui and this application. If this is |
| 32 | the case, you may need to manually update imgui or this source code to add or |
| 33 | remove "SDL2/" in `<SDL2/sdl_file_name.h>`, depending on where your package |
| 34 | manager installed things. |
| 35 |
|
| 36 |
|
| 37 | ### Source Code |
| 38 |
|
| 39 | It's not as pretty as I made it look in the article. OpenGL abstractions in |
| 40 | `src/render`. Fractal application in `src/game/Mandelbrot.cpp`. Shaders in |
| 41 | `include/render/shaders`. If you're looking to try out new z-transforms, you'll |
| 42 | want to modify `include/render/shaders/fractal.cs.glsl`. |
| 43 |
|
| 44 |
|