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)
ModuleGraphics: fix for mip level computation was wrong because depth is ignored. 834ceab8e0ea99b6b8c25928c9f3be968679cff3 Jackalope 2020-05-21 11:57:26
Compute module. Image copy staging buffer size limit problem fixed by representing row image memory in staging buffer. 740d8bf1d12352b08da05a63957afcb508ea6fd5 Jackalope 2020-05-21 11:55:31
Math new types update d0069637df7a0f74a9492a2a2a2d7a33102afde6 Jackalope 2020-05-21 11:51:46
Checking for blit support and fix typo in texture write f1adac801689ee3f7905d2582ac26948260bb352 Jackalope 2020-05-20 18:39:36
Added VkFormat properties checks and fallbacks to follow specification rules. 3c38bb0e9916aea31ef796a53a024aa3111e1ec7 Jackalope 2020-05-19 17:42:59
renamed compute::BindingsSet to BindingSet, vkw::BindNo to vkw::Binding, compute::BindingCreateInfo.bindingNo to binding 072430e257166208d6f4a7b759169779f21bf4c8 Jackalope 2020-05-18 17:51:25
better documentation 5233938573e5c557667de4f467209099a3d48faa Jackalope 2020-05-18 17:38:59
README improvements 3efd2a514affc8c6d706799fd56857c1a7c0d0f6 Jackalope 2020-05-18 17:35:48
better hash for white noise 55b1d39969b9a27a602c464ca216a89ec92cee0b Jackalope 2020-05-17 11:20:30
another reference to temporary removed 84231ce8c36619f9c696cb7da2879f504fa2e66c Jackalope 2020-05-17 10:46:26
removed git_sh directory 4fab20bc30f66ff96fdc9a336708cc5049c13ecb Jackalope 2020-05-17 04:13:34
README 9f70b0aba59a4eed15c5dc86423b0f7976734ce2 Jackalope 2020-05-17 04:09:18
removed C99 extension used in the nested structures initialization b5f33b0c562fd8cc872217eefde5fd6f58318ea3 Jackalope 2020-05-17 03:53:57
Make JEN modules as separate CMake targets e51ffd5b6cb8b1ba15e1f5df683feec8e0665240 Jackalope 2020-05-17 03:52:55
Automated shaders compilation with cmake, no more binaries in git efa9657336852c3543221bc56f4121f698f26044 Jackalope 2020-05-16 13:07:12
Compute process bug fix: correctly fences reset and removed reference to temporary c30b7bf737890cc3a23022c5c5470225bb324443 Jackalope 2020-05-16 07:00:15
pass shader specialization by constant refference 9e14c11e60d709d374f71aec393d28377b1525d2 Jackalope 2020-05-15 12:45:06
Added second template argument for white noise to support custom hash function. 9a714ad51903e35d158ff285fc6e1f517e7100c0 TheArtOfGriefing 2020-05-15 12:22:08
Added shadow map commads fence 447a75b3124eae48d64bf3646df90a7db1adcc57 Jackalope 2020-05-13 09:38:49
Fixed bug with timeline semaphores 08be9cf8af7d32c460fc77ca7c5b0a25976a6d79 Jackalope 2020-05-13 08:21:33
Commit 834ceab8e0ea99b6b8c25928c9f3be968679cff3 - ModuleGraphics: fix for mip level computation was wrong because depth is ignored.
Author: Jackalope
Author date (UTC): 2020-05-21 11:57
Committer name: Jackalope
Committer date (UTC): 2020-05-21 11:57
Parent(s): 740d8bf1d12352b08da05a63957afcb508ea6fd5
Signing key:
Tree: 403bcad8f82c49bf27cc73573ad5ac02b7a49d31
File Lines added Lines deleted
src/graphics/resources.h 4 3
File src/graphics/resources.h changed (mode: 100644) (index d32a10d..6f8425b)
... ... struct jen::GpuTexture {
42 42 void init(const jrf::Image &src, VkFormat format, bool destroy_source) { void init(const jrf::Image &src, VkFormat format, bool destroy_source) {
43 43 this->format = format; this->format = format;
44 44 state = ResourceState::LOADING; state = ResourceState::LOADING;
45 mip_levels = mip_level(src.extent.width, src.extent.height);
45 mip_levels = mip_level(src.extent);
46 46 is_source_destroy_allowed = destroy_source; is_source_destroy_allowed = destroy_source;
47 47 source = src; source = src;
48 48 } }
 
... ... struct jen::GpuTexture {
52 52 is_source_destroy_allowed = false; is_source_destroy_allowed = false;
53 53 } }
54 54 } }
55 static uint32_t mip_level(uint32_t width, uint32_t height) {
56 return uint32_t(std::floor(std::log2(jl::max(width, height)))) + 1;
55 static uint32_t mip_level(const jrf::Image::Extent &ext) {
56 auto max = jl::max(jl::max(ext.width, ext.height), ext.depth);
57 return uint32_t(std::floor(std::log2(max))) + 1;
57 58 } }
58 59 GpuImage<GpuImageMode::VIEW> gpu_im; GpuImage<GpuImageMode::VIEW> gpu_im;
59 60 VkFormat format; VkFormat format;
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