Skip to content

Commit a841e4e

Browse files
committed
entry for new readme
1 parent 987a5de commit a841e4e

File tree

1 file changed

+14
-296
lines changed

1 file changed

+14
-296
lines changed

README.md

Lines changed: 14 additions & 296 deletions
Original file line numberDiff line numberDiff line change
@@ -1,311 +1,29 @@
11
# Nabla
22

3-
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
3+
< nice badges here >
44

5-
**Nabla** (previously called **[IrrlichtBaW](https://github.com/buildaworldnet/IrrlichtBAW)** ) is a new renovated version of older **[Irrlicht](http://irrlicht.sourceforge.net/)** engine.
6-
The name change to Nabla allows for using Nabla side by side with the legacy Irrlicht and IrrlichtBaW engines.
7-
The project currently aims for a thread-able and *Vulkan*-centered API, the Vulkan backend is almost complete, and OpenGL and ES backends are currently in maintenance mode.
5+
< TODO: short desc >
86

9-
This framework has been kindly begun by the founder ***[@devshgraphicsprogramming](https://github.com/devshgraphicsprogramming)*** of **[Devsh Graphics Programming Sp. z O.O.](http://devsh.eu/)** and was almost entirely sponsored by **Build A World Aps** in its early days, now it has been picked up by **[Ditt B.V.](https://www.ditt.nl/)**.
7+
# Table of Contents
108

11-
## (Get Hired) Jobs and Internships
9+
< TODO >
1210

13-
If you are a programmer with a passion for High Performance Computing, Mathematics and Computer Graphics
11+
# Showcase
1412

15-
If you can be in charge of your own time managment and work 4-day work weeks 100% remotely
13+
< nice grid >
1614

17-
Then make something impressive using **Nabla**, open a PR and contact us (`jobs@devsh.eu` or **[discord](https://discord.gg/4MTCVaN)**) with your CV. *Check our [Free Task List](https://github.com/Devsh-Graphics-Programming/Nabla/blob/master/CONTRIBUTING.md#free-tasks-to-take-do-any---we-can-hire-you-) for contribution ideas!*
15+
# Features
1816

19-
We would also be happy to sponsor your master or bachelor thesis as long as:
20-
- You are an above average student with an interest in Graphics
21-
- It will be written in English
22-
- It will produce contributions to Nabla which we can license under Apache 2.0
17+
< features >
2318

24-
For internships contact us with:
25-
- CV in english
26-
- A neat description of any paperwork you'll need (schools/universities)
27-
_Most importantly contact us at least 3 weeks in advance of your internship organisation deadline!_
19+
# FAQ
2820

29-
## (Hire Us) Contracting
21+
< FAQ >
3022

31-
The members of **Devsh Graphics Programming Sp. z O.O.** (Company Registration (KRS) #: 0000764661) are available (individually or collectively) for contracts on projects of various scopes and timescales, especially on foreign frameworks, codebases and third-party 3D frameworks.
23+
# Get expert
3224

33-
**We provide expertise in:**
25+
< TODO >
3426

35-
- OpenGL
36-
- OpenGL ES
37-
- WebGL
38-
- WebGPU
39-
- Vulkan
40-
- OpenCL
41-
- CUDA
42-
- D3D12 and D3D11
43-
- computer vision
44-
- Audio programming
45-
- DSP
46-
- video encoding and decoding
47-
- High Performance Computing
27+
# Join our team
4828

49-
Our language of choice is C++20 however we're also amenable to C#, Java, Python and related languages.
50-
51-
Contact `newclients@devsh.eu` with inquires into contracting.
52-
53-
## Showcase
54-
55-
### Screenshots
56-
57-
### <u>Our Production Mitsuba Compatible Path Tracer made for Ditt B.V.</u>
58-
59-
Currently working on the `ditt` branch, in the process of being ported to Vulkan KHR Raytracing.
60-
61-
You can download a stable build [here](https://artifactory.devsh.eu/Ditt/ci/data/artifacts/public/Ditt.tar.bz2)
62-
63-
![](https://github.com/Devsh-Graphics-Programming/Nabla-Site-Media/blob/master/media/readme/screenshots/4e86cf2b-3f8e-40eb-9835-6553ea205df2.jpg?raw=true)
64-
65-
### [Multiple Importance Sampling and Depth of Field](https://www.youtube.com/watch?v=BuyVlQPV7Ks)
66-
67-
![](https://github.com/Devsh-Graphics-Programming/Nabla-Site-Media/blob/master/media/readme/gifs/myballs/Multiple%20Importance%20Sampling%20and%20Depth%20of%20Field%203.gif?raw=true)
68-
69-
![](https://github.com/Devsh-Graphics-Programming/Nabla-Site-Media/blob/master/media/readme/gifs/myballs/Multiple%20Importance%20Sampling%20and%20Depth%20of%20Field%205.gif?raw=true)
70-
71-
## Main Features
72-
73-
- **Frontend API with Vulkan as First Class Citizen**
74-
- **Thread safe and context pollution safe OpenGL**
75-
- **Asset management pipeline**
76-
- **Automatic pipeline layout creation**
77-
- **Shader introspection**
78-
- **Using SPIR-V shaders in OpenGL and ES**
79-
- **Libraries of GLSL shader functions**
80-
- **Compute shaders**
81-
- **Virtual Texturing**
82-
- **Virtual Geometry (programmable and non programmble fetching) with triangle batching**
83-
- **CUDA and Vulkan interop**
84-
- **CPU asset manipulation (image filtering, image format transcoding, mesh optimization and manipulation)**
85-
- **GPU driven Scene Graph**
86-
- **Material Compiler for Path Tracing UberShaders**
87-
88-
## Main Delivered Extensions
89-
90-
- **Auto Exposure**
91-
- **Tonemapper**
92-
- **Mitsuba scene loader (auto-generated shaders)**
93-
- **Fastest blur on the planet**
94-
- **OptiX interop**
95-
- **Bullet physics beginner integration**
96-
- **GPU Radix Sort**
97-
98-
## Platforms
99-
100-
- [x] **Windows**
101-
102-
- [x] **Linux**
103-
104-
- [x] **Android 7.0 +**
105-
106-
- [ ] **Mac OS**
107-
108-
- [ ] **iOS**
109-
110-
## Build summary
111-
112-
| ![][BUILD_STATUS] | Release | RWDI | Debug |
113-
| :----------------------: | :----------: | :----------: | :----------: |
114-
| **Windows MSVC x64** | ![][MSVC_1] | ![][MSVC_2] | ![][MSVC_3] |
115-
| **Android Clang x86_64** | ![][CLANG_1] | ![][CLANG_2] | ![][CLANG_3] |
116-
| **Linux GCC x64** | ![][NA] | ![][NA] | ![][NA] |
117-
118-
[MSVC_1]: https://ci.devsh.eu/buildStatus/icon?job=BuildNabla%2FDEVSH_CONFIGURATIONS%3DRelease%2CDEVSH_NODES%3Dpredator15%2CDEVSH_OS%3DWindows
119-
[MSVC_2]: https://ci.devsh.eu/buildStatus/icon?job=BuildNabla%2FDEVSH_CONFIGURATIONS%3DRelWithDebInfo%2CDEVSH_NODES%3Dpredator15%2CDEVSH_OS%3DWindows
120-
[MSVC_3]: https://ci.devsh.eu/buildStatus/icon?job=BuildNabla%2FDEVSH_CONFIGURATIONS%3DDebug%2CDEVSH_NODES%3Dpredator15%2CDEVSH_OS%3DWindows
121-
[CLANG_1]: https://ci.devsh.eu/buildStatus/icon?job=BuildNabla%2FDEVSH_CONFIGURATIONS%3DRelease%2CDEVSH_NODES%3Dnode1%2CDEVSH_OS%3DAndroid
122-
[CLANG_2]: https://ci.devsh.eu/buildStatus/icon?job=BuildNabla%2FDEVSH_CONFIGURATIONS%3DRelWithDebInfo%2CDEVSH_NODES%3Dnode1%2CDEVSH_OS%3DAndroid
123-
[CLANG_3]: https://ci.devsh.eu/buildStatus/icon?job=BuildNabla%2FDEVSH_CONFIGURATIONS%3DDebug%2CDEVSH_NODES%3Dnode1%2CDEVSH_OS%3DAndroid
124-
[NA]: https://img.shields.io/badge/free%20slot-n%2Fa-red
125-
[BUILD_STATUS]: https://img.shields.io/badge/build-status-blueviolet
126-
127-
# Quick start
128-
129-
### Use Nabla from package
130-
131-
TODO - soon
132-
133-
### Build Nabla with Docker
134-
135-
TODO - soon
136-
137-
### Build Nabla manually
138-
139-
#### Minimal required dependencies
140-
141-
- **[CMake 3.29.2](https://cmake.org/download/)** version or higher
142-
- **[Vulkan SDK 1.2.198.1](https://vulkan.lunarg.com/sdk/home)** version or higher
143-
- **[NASM 2.15](https://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D)** version or higher
144-
- **[Python 3.10.2](https://www.python.org/downloads/release/python-3102/)** version or higher
145-
146-
### Cloning the project
147-
148-
```shell
149-
git clone git@github.com:Devsh-Graphics-Programming/Nabla.git <target directory>
150-
```
151-
152-
#### Force HTTPS protocol (optional)
153-
154-
We support cloning Nabla with **ssh only**, however you can still clone Nabla and it's all submodules with https by overriding global git configuration (sorry, must be global for it to work, currently we don't have smart scripts to change local configuration for each nested submodule).
155-
156-
```powershell
157-
git init
158-
git config --global protocol.*.allow always
159-
git config --global url."https://github.com/".insteadOf "git@github.com:"
160-
git remote add origin https://github.com/Devsh-Graphics-Programming/Nabla.git
161-
git fetch origin master
162-
git checkout master
163-
```
164-
165-
### Configure & Generate with CMake
166-
167-
#### Target platform
168-
169-
Check individual instructions for building for a particular platform in **./docs/build** directory before going further. For each platform it is assumed minimal required dependencies are installed and additional may be specified depending on the target.
170-
171-
#### Submodules
172-
173-
CMake will update **all required submodules** for you by default but it doesn't mean the initialization & update attempt will be successful (it is often not when performed on a shaky internet connection, so you may end up with dirty, locked or un-versioned submodules) - if not successful then try to re-configure CMake again. We have a few options for managing submodules by CMake, for more details and description check the [update submodule script](https://github.com/Devsh-Graphics-Programming/Nabla/blob/master/cmake/submodules/update.cmake). For example sometimes it may appear that there won't be any files in submodules' directories because of an update fail or dirty git cache, you could fix it and bring them back by enabling `NBL_FORCE_ON_UPDATE_GIT_SUBMODULE` CMake option. Note that we do not recommend to initialize and update submodules by hand in cmd because of private submodules in the repository.
174-
175-
#### More options
176-
177-
You can disable generating projects for examples with `NBL_BUILD_EXAMPLES`. It's recommended to build Nabla as shared library however you can also build as static library by turning on `NBL_STATIC_BUILD`.
178-
179-
#### CMake presets
180-
181-
We have customised [presets](https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html) which may be handy to configure **Nabla** project for a target platform with predefined & common configurations.
182-
183-
# Caveats and Particular Behaviour
184-
185-
## Hardcoded Caps
186-
187-
### Max Descriptor Sets is always 4
188-
189-
## Debugging with RenderDoc
190-
191-
### Non-programmatic OpenGL catpures will be delimited inconsistently
192-
193-
Due to our no-pollution opengl state isolation policy, we have 1 queue or swapchain = 1 thread = 1 gl context + 1 master context and thread for device calls.
194-
195-
Renderdoc therefore serializes all calls, and presents them inside the capture in interleaved order (records them on a single timeline "as they happened").
196-
197-
Furthermore it has no idea what constitutes a frame, because swap-buffers call happens on a separate thread than all the other API calls. **So use the `IGPUQueue` start/end capture methods!**
198-
199-
### RenderDoc flips images for display in the ImageViewer tab on OpenGL captures
200-
201-
Ctrl+F `localRenderer in https://github.com/baldurk/renderdoc/blob/4103f6a5455b9734e9bf74e254577f5c03188136/renderdoc/core/image_viewer.cpp
202-
203-
### OpenGL/Vulkan Inconsistencies
204-
205-
In certain cases same calls to Vulkan and OpenGL might result in y-flipped image relevant to the other API.
206-
207-
Both APIs write (-1,-1) in NDC space to (0,0) in image space (two wrongs make right), and memory-wise (0,0) always represents the lowest byte in memory.
208-
209-
This inconsistency comes from swapchain presentation. When presenting the swapchain, the image location (0,0) corresponds to **bottom-left** in OpenGL and **top-left** in Vulkan.
210-
211-
#### Solution by Surface Transforms
212-
213-
We solve this inconsistency by using [surface transforms](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkSurfaceTransformFlagBitsKHR.html); This transforms are relative to `presentation engine’s natural orientation`. and we report `HORIZONTAL_MIRROR_180` support in our OpenGL backend and defer handling these rotations (relative to natural orientaion) to the user.
214-
215-
We provide helper functions in both GLSL and C++ Nabla codebase to consider surface transforms, See [surface_transform.glsl](https://github.com/Devsh-Graphics-Programming/Nabla/tree/master/include/nbl/builtin/glsl/utils/surface_transform.glsl)
216-
217-
Note that it is common to apply surface transformation to projection matrices to account for this fact. See [getSurfaceTransformationMatrix](https://github.com/Devsh-Graphics-Programming/Nabla/tree/master/include/nbl/video/surface/ISurface.h) and [Android Developers Guide to Pre-rotation](https://developer.android.com/games/optimize/vulkan-prerotation)
218-
219-
Use [`ISwapchain getSurfaceTransform()`](https://github.com/Devsh-Graphics-Programming/Nabla/tree/master/include/nbl/video/ISwapchain.h) to get the transformation from swapchain.
220-
221-
- When generating projection matricies, take into account the aspect ratio (which is changed when rotating 90 or 270 degrees). For this, we have helper functions in both GLSL and the ISurface class:
222-
- [`float getTransformedAspectRatio(const E_SURFACE_TRANSFORM_FLAGS transform, uint32_t w, uint32_t h)`](https://github.com/Devsh-Graphics-Programming/Nabla/tree/master/include/nbl/video/surface/ISurface.h)
223-
- [`nbl_glsl_surface_transform_transformedExtents`](https://github.com/Devsh-Graphics-Programming/Nabla/tree/master/include/nbl/builtin/glsl/utils/surface_transform.glsl)
224-
225-
- On the swapchain rendering pass, perform **one** of the following transforms:
226-
- If rendering **directly to the swapchain**, you can apply the (post) transform matrix to your projection or combined view-projection matrix **for rendering** (don't pre-multiply with projection matrix for use outside rendering):
227-
- [`matrix4SIMD ISurface::getSurfaceTransformationMatrix(const E_SURFACE_TRANSFORM_FLAGS transform)`](https://github.com/Devsh-Graphics-Programming/Nabla/tree/master/include/nbl/video/surface/ISurface.h)
228-
- [`nbl_glsl_surface_transform_applyToNDC`](https://github.com/Devsh-Graphics-Programming/Nabla/tree/master/include/nbl/builtin/glsl/utils/surface_transform.glsl) (This takes in an NDC coordinate and multiplies it with the transform matrix in one function)
229-
230-
- If using `imageStore` to write **directly to the swapchain**, you can either:
231-
- Apply a transform to the screen-space coordinates being written to the swapchain:
232-
- [`nbl_glsl_surface_transform_applyToScreenSpaceCoordinate`](https://github.com/Devsh-Graphics-Programming/Nabla/tree/master/include/nbl/builtin/glsl/utils/surface_transform.glsl)
233-
- Apply an **inverse** transform to the screen-space coordinates (taken from `gl_GlobalInvocationID.xy`) before turning them into UV/world-space coordinates for rendering:
234-
- [`nbl_glsl_surface_transform_applyInverseToScreenSpaceCoordinate`](https://github.com/Devsh-Graphics-Programming/Nabla/tree/master/include/nbl/builtin/glsl/utils/surface_transform.glsl)
235-
236-
# Continuous integration
237-
238-
## Nabla Python Framework
239-
240-
### CPU & GPU local tests shipped with the repository
241-
242-
#### Description
243-
244-
**Nabla** aims to implement full CPU & GPU tests used by our CI in-house infrastructure groovy pipelines in relocatable way allowing users to execute and debug the tests locally on their own devices as well. Each test is a Python module which part of it gets created with the CMake build system configuration. A test is defined and created as a module by
245-
246-
- top json configuration file
247-
- interface Python script
248-
249-
Top json configuration file contains run & build info, array of profiles and json inputs for a Python testing module. The file is processed and validated by CMake to create output profiles bound to the Python module. Single profile contains data used by the module to execute tests with and the implementation of the test is located in interface Python script - the script overrides common abstract interface defined as a integral part of Nabla Python framework module. The description is abstract and doesn't contain specific details, join our discord if you have any questions!
250-
251-
#### Development & Debug
252-
253-
Each valid Python module contains autogenerated .vscode's *launch.json* and *settings.json* to make development easy. You just need to `Open with Code`in the module's directory. Make sure to install [Python extension](https://marketplace.visualstudio.com/items?itemName=ms-python.python) there to enable IntelliSense (Pylance), Linting, Debugging (multi-threaded, remote), code formatting, refactoring, unit tests, and more.
254-
255-
A target for which Python module is available for testing lists a special Python Framework section located in its solution's project file structure (**Visual Studio only!**) containing Nabla Python Framework sources, target's interface Python script, autogenerated json profiles and autogenerated` __main__.py` module script. Unfortunately pure Visual Studio works so-so with Python (issues with search module paths defined as `searchPath` .pyproj's property, issues with IntelliSense and Debugging) - we encourage to use Visual Studio Code if you need to Debug an interface or develop it.
256-
257-
#### Runtime
258-
259-
##### Command line
260-
261-
To run all tests bound to a module with a command line you just need to execute `python3 -m <module_reference>`. You can also specify special arguments to have more control over the test execution, for more details see [template module script](https://github.com/Devsh-Graphics-Programming/Nabla-Continous-Integration-Python-Framework/blob/4f7a67a3fa9bb418bcb07fa2f7a5853e55b853c4/scripts/__main__.py.cmake)
262-
263-
##### Visual Studio
264-
265-
You need to open a target's solution. To launch all tests bound to a module a module's `__main__.py` file located in Python Framework section must be selected and `Debug -> Execute File in Python interactive` executed.
266-
267-
**Visual Studio Code**
268-
269-
You need to open module's directory as workspace with `Open with Code `, select `Run and Debug` icon, select `__main__.py` file and run it.
270-
271-
# License
272-
273-
**Nabla** is released under the **[Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)** license. See [**LICENSE.md**](https://github.com/Devsh-Graphics-Programming/Nabla/blob/master/LICENSE.md) for more details.
274-
275-
# Documentation
276-
277-
**(WIP/TODO)**
278-
279-
# Official Support (Discord)
280-
281-
Permanent members of *Devsh Graphics Programming Sp. z O.O.* use this to organise publicly visible work. **[Join to the server](https://discord.gg/4MTCVaN)** to get into more details.
282-
283-
# Credits and Attribution
284-
285-
#### The authors of **Nabla** are:
286-
287-
- **Mateusz Kielan** ***[@devshgraphicsprogramming](https://github.com/devshgraphicsprogramming)*** (Lead Programmer)
288-
- **Arkadiusz Lachowicz** ***[@AnastaZIuk](https://github.com/AnastaZIuk)*** (Associate Graphics Programmer/Senior Build System Engineer)
289-
- **Erfan Ahmadi [@Erfan](https://github.com/Erfan-Ahmadi)** (Mid Programmer)
290-
- **Achal Pandey [@achalpandeyy](https://github.com/achalpandeyy)** (Associate Programmer)
291-
- **Przemysław Pachytel** ***[@Przemog1](https://github.com/Przemog1)*** (Junior Programmer/Technical Writer)
292-
293-
#### Past Authors and Contributors:
294-
295-
- **Krzysztof Szenk** ***[@crisspl](https://github.com/Crisspl)*** (Senior Programmer: Everything in Nabla has been touched by his golden hands!)
296-
- **Danylo Sadivnychyi [@sadiuk](https://github.com/sadiuk)** (Junior Programmer: Android system interfaces and buildsystem, FFT Ocean)
297-
- **Cyprian Skrzypczak** ***[@Hazardu](https://github.com/Hazardu)*** (embeded resources and optimalizations)
298-
- ***[@khom-khun](https://github.com/khom-khun)*** (Bullet Physics Extension + Example and **[the irrBaW-test repository of easy to understand demos](https://github.com/khom-khun/irrBAW-test)**)
299-
- **Søren Gronbech**
300-
- ***[@florastamine](https://github.com/florastamine)*** **Nguyễn Ngọc Huy** (sRGB-Correct Image Loaders, CEGUI and BRDF Explorer GUI)
301-
- ***[@manhnt9](https://github.com/manhnt9)*** **Nguyễn Tiến Mạnh** (CEGUI, Build System and Radeon Rays Proof-of-Concept Integration in Prime Engine X with IrrlichtBaW back-end)
302-
303-
#### Words of appreciation for developers whose software has been used in **Nabla**, currently and in the past:
304-
305-
- The initial Irrlicht 1.8.3 codebase
306-
- **[OpenSSL](https://github.com/openssl/openssl)** and **[aesGladman](https://github.com/BrianGladman/aes)**
307-
- **[SPIRV-Cross](https://github.com/KhronosGroup/SPIRV-Cross)**
308-
- **[shaderc](https://github.com/google/shaderc)**
309-
- **[zlib](https://github.com/madler/zlib)**, **[bzip](https://github.com/enthought/bzip2-1.0.6)**, **[libzip2](https://packages.debian.org/search?keywords=libzip2)**, **[lzma](https://github.com/jljusten/LZMA-SDK)** and **[lz4](https://github.com/lz4/lz4)**
310-
- **[libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo)**, **[jpeglib](http://libjpeg.sourceforge.net/)** (past), **[libpng](https://github.com/glennrp/libpng)**
311-
- Unicode convert_utf and utf8cpp (will be removed soon!)
29+
< TODO >

0 commit comments

Comments
 (0)