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)
cube TOP and BOTTOM faces correct coordinates ad27c4322f9103d03891aadee452f52c7ec7eed1 Jackalope 2020-03-29 07:04:29
wrong atlas result value in assertion fixed a4776dc8935865640a12036be41b79084d762f82 Jackalope 2020-03-28 12:56:37
removed #pragma once from main file 1054379a52420eba68f62305675c3928dbd6a4ed Jackalope 2020-03-28 12:56:02
some identation fixes a7f2ba135bb6c8195682564727c1bd39721b8b17 Jackalope 2020-03-25 13:25:29
mesh library refactoring 4dd908c51d97035ed26cb1c413685c1a8ab15c77 Jackalope 2020-03-25 13:24:43
removed old unmaintained directory 75b147dd4dc5d3592da21a707ac301cd46eaaf3d Jackalope 2020-03-19 19:35:03
shader specialization constants support 932cd42ce93f89bd2c6b0a3a37eb9b74482f0d13 Jackalope 2020-03-09 04:58:58
compute module staging support 99a1a110c75a021e956b8ad5c481f269d693e078 Jackalope 2020-03-06 07:06:36
changed compute stage flag name (was wrong) 0e21df1430ac55c1dbc8a0f1969ffb1ec303b870 Jackalope 2020-03-06 06:59:38
changed compute interface to support reading after and writting before computing, staging is not supported yet 173f29331f5ebb5206f4086d58e93689eb85df96 Jackalope 2020-03-06 05:35:16
added staging allocation to Bindings b74e1cc5e8d80528e48e4f00ae215c547c685211 Jackalope 2020-03-06 05:34:04
Separate ComputeCmdUnit for cmds and syncs 9dc0a4a62e6fa68e60cfbd420eff61d8ee4334f0 Jackalope 2020-03-06 04:02:24
Compute descriptor set improvement, support for different descriptor types 5aad5ee0e4304b2035a652f4d4ca28e7a75bc93d Jackalope 2020-02-29 16:10:50
changed doxygen commentary style in DevMemUse description 9e9a548d6c50363a841af5d4897268aadba6ebed Jackalope 2020-02-29 16:08:33
make buffer functions const 24e343bc583629d08fad4d3dadb36a2fd72a4ca7 Jackalope 2020-02-29 16:08:04
added missing check in draw_drame cc6483e804d463fe4d1c41746692ec98bfbe53e8 Jackalope 2020-02-19 12:40:19
solved freee bug, draw data have pointer to user light data instead of applying every frame f60e7d3908651512a90488966141620306d54151 Jackalope 2020-02-19 10:50:22
solved lights flickefing issue c5cad408d3d9d908ac52760ebf1c42e7d578e61e Jackalope 2020-02-19 10:48:46
apply camera and frustum in single function ac6b09e32f0afa65eef918fb7bdb935cb99da2d8 Jackalope 2020-02-18 16:32:41
draw data wrong camera aspect fix 5d9270631a2ff3232c4928d811d55079ee30e6af Jackalope 2020-02-18 16:27:11
Commit ad27c4322f9103d03891aadee452f52c7ec7eed1 - cube TOP and BOTTOM faces correct coordinates
Author: Jackalope
Author date (UTC): 2020-03-29 07:04
Committer name: Jackalope
Committer date (UTC): 2020-03-29 07:04
Parent(s): a4776dc8935865640a12036be41b79084d762f82
Signer:
Signing key:
Signing status: N
Tree: ee769bcc75c3dd48df41506f97967233fbd445d7
File Lines added Lines deleted
libs/mesh/cube.h 4 4
File libs/mesh/cube.h changed (mode: 100644) (index ebaa994..340ca44)
... ... namespace mesh::cube
24 24 }; };
25 25
26 26 constexpr static const math::v3f NORMALS[Face::FACE_COUNT] = { constexpr static const math::v3f NORMALS[Face::FACE_COUNT] = {
27 { 0, 1, 0 },//TOP
28 { 0, -1, 0 },//BOTTOM
27 { 0, -1, 0 },//TOP
28 { 0, 1, 0 },//BOTTOM
29 29 { 0, 0, 1 },//NORTH { 0, 0, 1 },//NORTH
30 30 { 0, 0, -1 },//SOUTH { 0, 0, -1 },//SOUTH
31 31 { -1, 0, 0 },//WEST { -1, 0, 0 },//WEST
 
... ... namespace mesh::cube
75 75 math::vec3<float_t> face_coordinate_to_real(Face face, float_t x, float_t y) { math::vec3<float_t> face_coordinate_to_real(Face face, float_t x, float_t y) {
76 76 using vec3 = math::vec3<float_t>; using vec3 = math::vec3<float_t>;
77 77 switch (face) { switch (face) {
78 case TOP : return vec3 { x, 1, y } - float_t(0.5);
78 case TOP : return vec3 { x,-1, y } - float_t(0.5);
79 79 case BOTTOM: return vec3 { y, 0, x } - float_t(0.5); case BOTTOM: return vec3 { y, 0, x } - float_t(0.5);
80 80 case NORTH : return vec3 { y, x, 1 } - float_t(0.5); case NORTH : return vec3 { y, x, 1 } - float_t(0.5);
81 81 case SOUTH : return vec3 { x, y, 0 } - float_t(0.5); case SOUTH : return vec3 { x, y, 0 } - float_t(0.5);
 
... ... namespace mesh::cube
88 88 template<typename T> template<typename T>
89 89 [[nodiscard]] constexpr inline Face real_coordinate_to_face(T x, T y, T z) { [[nodiscard]] constexpr inline Face real_coordinate_to_face(T x, T y, T z) {
90 90 const Face faceX = x >= 0 ? Face::EAST : Face::WEST; const Face faceX = x >= 0 ? Face::EAST : Face::WEST;
91 const Face faceY = y >= 0 ? Face::TOP : Face::BOTTOM;
91 const Face faceY = y >= 0 ? Face::BOTTOM: Face::TOP;
92 92 const Face faceZ = z >= 0 ? Face::NORTH : Face::SOUTH; const Face faceZ = z >= 0 ? Face::NORTH : Face::SOUTH;
93 93
94 94 const auto abs_x = std::abs(x); const auto abs_x = std::abs(x);
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