Jackalope / jen (public) (License: GPLv3 or later version) (since 2018-10-24) (hash sha1)
----> ABOUT:

3D rendering and computing framework based on Vulkan API.

Libraries:
- simdcpp submodule (see my simdcpp repo)
- jmath submodule (see my jmath repo)
- mesh (constexpr generation of cubes, spheres, icosahedrons subdivisions)
- atlas (1D lines and 2D rectangles cutting)
- jlib submodule (see my jlib repo)
- jrf submodule (see my jrf repo)
- vkw (Vulkan API C++ wrapper)
Modules:
- compute (run compute shaders on gpu)
- graphics (draw models with clustered forward rendering and onscreen text)
- resource manager (load meshes, models, textures, scene data from
files and create related objects in graphics module)

----> INSTALLING:

To download all the parts of this framework it's enough to launch
git clone with recursive flag:

$ git clone —recursive ssh://rocketgit@ssh.rocketgit.com/user/Jackalope/jen

After this look at git tags:

$ git tag

It is recommended to use a tagged version instead of the latest commit,
because the first commit after the tagged one mostly includes incompatible
parts of future changes for the next version.

$ git checkout v0.1.0

----> DEPENDENCIES:

To use JEN as CMake subdirectory and successfully build programs with it
you need to make sure you have all of its dependencies:
- compiler: Clang or GCC, support for C++17. Clang 10+ or GCC 9+ is recommended,
compiling on Windows OS is tricky and requires something like MinGW with MSYS,
there are also some complications to go through to make dependencies work;
- GLFW3 library, supported version is 3.2.1;
- FreeType library, if graphics module will be used;
- Vulkan API headers, and optional validation layers to debug sneaky problems,
you also need Vulkan support in your graphics driver to run compiled programs;
- LibZip can be necessary, if JRF is used to read zip files;
- CMake, for obvious reasons;
- glslangValidator to compile shader for the graphics module.

CMake must be able to find GLFW3, Vulkan and FreeType (for graphics)
with find_package().

----> HOW TO USE IT:

To use JEN, you need to add it as a subdirectory:

add_subdirecroty(${PATH_TO_JEN})

There are several configuration options:
- JEN_MODULE_COMPUTE - turn compute module on for compiling and including;
- JEN_MODULE_GRAPHICS - turn graphics module on ...;
- JEN_MULTITHREADED_DRAW_FRAME - draw_frame function will use thread pool queue
instead of linear executing;
- JEN_MODULE_RESOURCE_MANAGER - resource manager module ON, if graphics is ON;
- JEN_VLK_VALIDATION - enable Vulkan Validation Layers to debug some errors
related to JEN. This will often produce false-positive,
as well as true-positive errors.

Look in CMakeLists.txt at JenExamples repo for details on how to use and
configure JEN automatically:

$ git clone ssh://rocketgit@ssh.rocketgit.com/user/Jackalope/JenExamples

Also I recommend to compile and run examples to make sure it works correctly.

----> SUPPORTED HARDWARE:

JEN has not been tested well, because it requires running it on large amount of
different hardware to do so. It must work with mesa driver and modern
Intel i965 GPUs as well as AMD GPUs.


----> DOCUMENTATION:

You can generate Doxygen documentation, to do so
turn on any of JEN_DOXYGEN_* options and run documentation target in cmake:

$ cmake -G %1 -DJEN_DOXYGEN_HTML=ON -DJEN_DOXYGEN_LATEX=ON
$ cmake —build —target documentation

Resource manager is not documented because it still requires large enhancements.
List of commits:
Subject Hash Author Date (UTC)
release macro fixed ebf6d8302ac06701d5fed4d4e153e0bc5c332990 Jackalope 2020-02-18 16:26:21
vkw memory barrier and buffer memory barrier 1df196563968fe2d0ab53f989b54b502500709e1 Jackalope 2020-02-17 18:31:15
removed forgotten redundand lines 24427796fde68c4d8a92b528ee876136da9ff365 Jackalope 2020-02-17 04:28:57
fix wrong cmd buffer begin flag f02a4272c22bfe918e4df881531699c723cf1156 Jackalope 2020-02-17 04:15:22
add temporary fix for some validation layers false-positives 9787cf6494ee83fe8c7313d0d3e7ce96ad0190e4 Jackalope 2020-02-17 06:34:31
updated descriptor pool size 8384cb8149bcba04addc908f0a5e67f291eff841 Jackalope 2020-02-17 02:43:08
new types headers for shorter integers and floating points 98da0d130bb5c78c16daaf1ffc56b046e524f756 Jackalope 2020-02-17 02:33:27
framework compute module 2441c321b81324b9873288a7c0ccb1f59fa982df Jackalope 2020-02-15 03:26:36
added conditional compiling JEN_PARALLEL_DRAW_FRAME macro 2db8f1d2583983542795ce43fe67a4505f697d39 Jackalope 2020-02-15 02:43:10
disable clusters transfer if memory is HOST_VISIBLE and DEVICE_LOCAL a85177626c71f008c4decf4a88c2ef61e6f3dda1 Jackalope 2020-02-15 02:20:00
one time submit conditional flag for cmdbuffer 1151a5f79a5c1a4e1b41ef286afe5f102a551111 Jackalope 2020-02-14 20:27:44
draw frame bug fixes ed1a9f52ad8356bd490add96ecae71d2113d2dbb Jackalope 2020-02-14 18:21:27
cmd_data changes for cmd buffers reusing af5c11485e1edca61f5b583b9aa65ab287ea12b1 Jackalope 2020-02-14 03:59:44
make optimization level 0 for debug builds 548ebeab7eb71651c9977d078b4cd3c0166bc843 Jackalope 2020-02-14 03:58:16
transfer submit in single api call 656c0ee13388551e7fd009924d83cbc244019def Jackalope 2020-02-12 11:26:30
changed resources update system for new parrallel cmd writing ec0467546583802f18afba5ed431a39a89fff34c Jackalope 2020-02-11 20:18:55
solved bug with queue submitting with timeline values 7deef93d35653404733b2c2b4959eb761d941a76 Jackalope 2020-02-11 19:40:50
set optimisation level 1 for debug builds 530a7e9d9537f8813d10b4bff8f76c910b1ad729 Jackalope 2020-02-11 19:39:58
timeline value only increases now (vulkan restriction) 709da156ad9536bcb591e02c456d8784a16c1f0a Jackalope 2020-02-11 13:50:14
timeline semaphore functions loading per devices, some bug fixes 030706303e9e2bb845d58b844c1e15700806ee63 Jackalope 2020-02-11 03:11:38
Commit ebf6d8302ac06701d5fed4d4e153e0bc5c332990 - release macro fixed
Author: Jackalope
Author date (UTC): 2020-02-18 16:26
Committer name: Jackalope
Committer date (UTC): 2020-02-18 16:26
Parent(s): 1df196563968fe2d0ab53f989b54b502500709e1
Signer:
Signing key:
Signing status: N
Tree: d029ac0b8eab072dbd847fa3b836e710b3357e24
File Lines added Lines deleted
src/graphics/cmd_data.h 3 0
File src/graphics/cmd_data.h changed (mode: 100644) (index 50faacf..35871db)
... ... namespace jen::vk
83 83 [[nodiscard]] constexpr vkw::Fence& fence() { [[nodiscard]] constexpr vkw::Fence& fence() {
84 84 switch(ID) { switch(ID) {
85 85 case FenceId::ATTACHMENTS: return async_syncs.fences[0]; case FenceId::ATTACHMENTS: return async_syncs.fences[0];
86 #ifdef JEN_VLK_VALIDATION
87 #warning temporary validations layers fix
86 88 case FenceId::DRAW_END: return per_frame[frame_index].syncs.fences[0]; case FenceId::DRAW_END: return per_frame[frame_index].syncs.fences[0];
89 #endif
87 90 } }
88 91 } }
89 92 template<EventId ID> template<EventId ID>
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/Jackalope/jen

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/Jackalope/jen

Clone this repository using git:
git clone git://git.rocketgit.com/user/Jackalope/jen

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main