Skip to content

πŸš€ C++23 based acceleration playground. Contains renderer with Vulkan/OpenGL support. Serves as playground for me to test new CMake/C++/Vulkan/... features.πŸš€

License

Notifications You must be signed in to change notification settings

Kataglyphis/Kataglyphis-BeschleunigerBallett

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


VulkanEngine
Kataglyphis-BeschleunigerBallett


VulkanEngine VulkanEngine VulkanEngine OpenGLEngine

A graphics engine built on top of Vulkan+OpenGL. Serves also as playground for learning various best practices in Graphic APIs, CMake, Rust, ....

see also Official homepage.

Linux build + test + coverage on Ubuntu 24.04 ARM Linux build + test + coverage on Ubuntu 24.04 x86 Windows Server 2025 build x86 MSVC and Clang CodeQL Automatic Dependency Submission TopLang Donate Twitter YouTube

Key Features β€’ How To Use β€’ Download β€’ Credits β€’ Related β€’ License

Table of Contents
  1. About The Project
  2. Getting Started
  3. Shaders
  4. Tests
  5. Docker
  6. Roadmap
  7. Contributing
  8. License
  9. Contact
  10. Acknowledgements
  11. Literature
  12. Common issues

About The Project


VulkanEngine VulkanEngine VulkanEngine


VulkanEngine VulkanEngine
VulkanEngine VulkanEngine

This project provides me a solid Vulkan/OpenGL renderer starting point for implementing modern established rendering techniques and getting quickly started in own research topics.
As this project evolved it gained additional functionality:

  • collecting/using CMake best practices
  • collecting/using C++ best practices and testing new lang features 😊
  • collecting experience in fuzzy/benchmark testing in C++
  • collecting experience in integrating πŸ’Œ Rust πŸ’Œ code in Cmake projects

Frequently tested under

  • windows server 2025 x64 Clang 20.1.0 and MSVC
  • ubuntu 24.04 x64 Clang 18.1.3
  • ubuntu 24.04 ARM Clang 18.1.3

Key Features

Category Feature Implement Status
Vulkan Render agnostic Rasterizer βœ”οΈ
Raytracing βœ”οΈ
Path tracing βœ”οΈ
PBR support (UE4, Disney, etc.) βœ”οΈ
.obj Model loading βœ”οΈ
Mip Mapping βœ”οΈ
OpenGL Render agnostic
Directional Lights βœ”οΈ
Point Lights βœ”οΈ
Spot Lights βœ”οΈ
Directional Shadow Mapping βœ”οΈ
Omni-Directional Shadow Mapping βœ”οΈ
Cascaded Shadow Mapping βœ”οΈ
Cloud system βœ”οΈ
3D-worley noise generation βœ”οΈ
.obj Model loading βœ”οΈ
PBR support (UE4,disney,phong, etc.) βœ”οΈ
Support for #include directives in shaders. βœ”οΈ
Sky box βœ”οΈ
Supporting compute shader βœ”οΈ
On the fly 3D worley/perlin noise creation βœ”οΈ
C++/CMake agnostic Code coverage for Clang βœ”οΈ
Advanced unit testing πŸ”Ά
Advanced performance testing πŸ”Ά
Advanced fuzz testing πŸ”Ά

Legend:

  • βœ”οΈ - completed
  • πŸ”Ά - in progress
  • ❌ - not started

Dependencies

Optional

Useful tools (you might also considering :) )

Benchmarking

VSCode Extensions

Getting Started

Specific version requirements

C++23 or higher required.
C17 or higher required.
CMake 4.0.2 or higher required.

Installation

  1. Clone the repo
    git clone --recurse-submodules [email protected]:Kataglyphis/Kataglyphis-BeschleunigerBallett.git
  2. Use the scripts (in the Scripts folder for installing dependencies on your system)
  3. Then build your solution with [CMAKE] (https://cmake.org/)
    You can follow my steps from my CMake best practices repo.
    For now the features in Rust are experimental. If you want to use them install Rust and set RUST_FEATURES=ON on your CMake build.

Alternatively you can use the build scripts I use for my standard configuration:

  • [buildEngine.sh]
  • [buildEngine.bat]
$ {WORKING_DIR}/GraphicsEngineVulkan/buildEngine[.sh/.bat]

Shaders

I provide two ways for compiling shaders with. Hence if you want to add new files as #include in your shaders you have to modify the files: (should be self-explanatory)

  • [include/vulkan_base/ShaderIncludes.hpp]
  • [cmake/CompileShadersToSPV.cmake]

appropriately.

Tests

I follow the test setup as descriped in: CMake best practices

Docker

Linux

Dockerfile stays at project root.

If you want to run it on NVIDIA GPUs you will have to
install the NVIDIA Container Toolkit
before you proceed with the next steps.

# build
docker build -t kataglphis_renderer_ubuntu24_04 .
# run container on wayland
# start docker in root of this repo 
xhost +local:root
docker run --rm -it \
  --gpus all \
  --network=host \
  -e QT_QPA_PLATFORM=wayland \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v $HOME/.Xauthority:/root/.Xauthority \
  --env DISPLAY=$DISPLAY \
  --env XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
  -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
  -v "$(pwd)":/workspace:rw \
  -w /workspace \
  kataglphis_renderer_ubuntu24_04 

Windows

NOTE: Pls for GPU accelerated Windows Docker have a look here

docker build -f docker/windows/Dockerfile -t my-windows-dev-image .
docker run --rm -it `
  -v "$($PWD.Path):C:\workdir" `
  my-windows-dev-image

Roadmap

Watch the refman generated by doxygen.

Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the MIT-License. See LICENSE for more information.

Contact

Jonas Heinle - @Cataglyphis_ - [email protected]

Project Link: https://github.com/Kataglyphis/GraphicsEngineVulkan

Acknowledgements

You will find important links to information in the code. But here in general some good sources of information:

Thanks for free 3D Models:

Literature

Some very helpful literature, tutorials, etc.

OpenGL

Clouds

Noise

Vulkan

Physically Based Shading

Path tracing

Docker

Common issues

  • Problem: If Validation Layers could not be found:
    A value given directly by extern c function 322
    [XXXX-XX-XX 10:30:40.877] [error] Validation layers requested, but not available!
    [XXXX-XX-XX 10:30:40.879] [error] Failed to create a Vulkan instance!
    [XXXX-XX-XX 10:30:40.880] [error] Validation layers requested, but not available!
    [XXXX-XX-XX 10:30:40.882] [error] Failed to create a Vulkan instance!
    ERROR:             vkGetInstanceProcAddr: Invalid instance [VUID-vkGetInstanceProcAddr-instance-parameter]
    Solution for linux:
    sudo apt install libvulkan1 vulkan-tools vulkan-validationlayers
    Otherwise you would have to install them via sdk.

About

πŸš€ C++23 based acceleration playground. Contains renderer with Vulkan/OpenGL support. Serves as playground for me to test new CMake/C++/Vulkan/... features.πŸš€

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published

Contributors 2

  •  
  •