Skip to content

merrittlj/salamander

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


Salamander
Salamander

Modern Vulkan based real-time renderer written in C++17.

Notice

This is the "development" branch! Most builds here will run, but may not be fully finished. Stable releases can be found on the "release" branch, but may not be as bleeding-edge as this.

Features

WIP

Disclaimer

Some features or parts of the engine may not be fully implemented and bugs will occur due to the work-in-progress nature of this project.

Screenshots

WIP

Project building and setup

Note: Currently only supported on Linux.

Dependencies

GLFW, GLM, stb_image.h, and tinygltf are all included in the project's source code. Vulkan tools, layers, and loader will need to be installed by your package manager. CMake and similar build tools may need to be installed if not already.

Compiling builds

To compile debug or release builds, you must be in the "build" directory and run the corresponding build script(compileDebug.sh, compileRelease.sh).

Compiled binaries

Compiled debug or release binaries can be found in the "bin" directory.

Setup

The environment variable %SALAMANDER_ROOT% has to point to Salamander's root directory("." relative to this file) for proper functionality. This can be set manually, or you can run "setupenv.sh" to automatically set up the environment variable(appends export to your ".bashrc"). In addition, see the "config" directory to view project configuration.

Controls

  • Right mouse button: Arcball camera control.
  • Mouse scroll: camera zoom.
  • "R" keypress: reset camera orientation.

Project structure

.
├── assets                    # Misc. and outside-project files.
│   ├── branding              # Project branding(logos, etc.).
│   ├── models                # (glTF) Default models and model storage directory.
│   └── textures              # Misc. textures.
├── bin                       # (Not included by the repository, created by script) Output binary files.
├── build                     # Compile debug or release mode scripts(.sh), CMake output directory.
├── include                   # Seperated project-related files.
│   ├── config                # Project configuration.
│   └── shaders               # Shaders used internally.
├── libs                      # Third-party libraries/dependencies.
│   ├── glfw                  # Used for windowing and input support.
│   ├── glm                   # Used for mathematics and useful graphics functions.
│   ├── stb                   # Used for texture image loading.
│   └── tinygltf              # Used for glTF model loading.
└── src                       # C++ implementation and header files.
    ├── core                  # Fundamental project code.
    │   ├── Application       # Highest-level application manager.
    │   ├── Buffer            # Vulkan buffer-related functions and code.
    │   ├── Callbacks         # Windowing, input, rendering, etc. callbacks.
    │   ├── Command           # Vulkan command handling.
    │   ├── Config            # (.scfg) Configuration system.
    │   ├── Defaults          # Global/"default" variables.
    │   ├── DisplayManager    # Display-related functions and code.
    │   ├── Logging           # Core error logging and handling systems.
    │   ├── Model             # Model loading and processing system.
    │   ├── Queue             # Queue and queue family related functions and code.
    │   ├── Renderer          # The core renderer.
    │   ├── Shader            # Shader-related functions and code.
    │   ├── VulkanExtensions  # Functions/features not included-by-default in Vulkan.
    │   └── VulkanInstance    # Vulkan setup and related functions and code.
    └── utils                 # Utility functions.

References

Vulkan Tutorial: Vulkan guidance.

SaferGo/CroissantVulkanRenderer: Project inspiration.

Included assets

License

Distributed under the Gnu General Public License. See 'LICENSE' for more info.