/liblava

A modern and easy-to-use library for Vulkan

Primary LanguageC++MIT LicenseMIT



A modern and easy-to-use library for the Vulkan® API


version License CodeFactor   Discord Donate Twitter Follow


lava provides essentials for low-level graphics - suited for prototyping, tooling, profiling and education.

This lean framework is written in neat C++23 and it strives for a modular rolling release as far as possible. We don't want to promise too much... but lava runs really smoothly on Windows and Linux.


➜   Download   •   Documentation (Tutorial + Guide)   •   Projects   •   Modules   •   Collaborate


In a nutshell

  • liblava is written in modern C++ with latest Vulkan support
  • Provides run loop abstraction for window and input handling
  • Plain renderer and command buffer model
  • Batteries included ➜ runtime shader compilation
  • Texture and mesh loading from virtual file system
  • Camera, imgui, logger and much more...

engine app frame   block asset resource base   file util core


Take a look

#include "liblava/lava.hpp"
#include "imgui.h"

int main(int argc, char* argv[]) {

    lava::engine app("imgui demo", { argc, argv });
    if (!app.setup())
        return lava::error::not_ready;

    app.imgui.layers.add("demo window", []() {
        ImGui::ShowDemoWindow();
    });

    return app.run();
}

Demos

demo lava demo
free download on ➜ itch.io

The collection includes all stages to play around. - You can easily switch between them.

Stages

light spawn
deferred shading + offscreen rendering

Small demo that showcases how to render to an offscreen framebuffer and sample from it. - It is a challenge in itself and also a compact solution.
spawn light
uniform buffer + camera

This loads a very large mesh from file and simply textures it. - Use your gamepad to control the camera if there is one around.
lamp lamp
push constants to shader

Classic lamp to relax and where colors can be easily switched. - Unfortunately it also consumes power - so be aware!
shapes shapes
generating primitives

Switch between basic shapes and use the camera to fly around. - A great start for your next interactive application.
generics generics
float, double & int meshes

This demo shows how to check GPU features and render mesh data with custom vertex layout. - There is a chapter about it in the Guide.
triangle triangle
unique classic mesh

Where graphics programming always begins. - An example that illustrates how little it actually takes to render a triangle.

Projects

rt cubes
raytraced reflecting cubes

Vulkan raytracing with liblava
Support for the Vulkan KHR ray tracing extensions with idiomatic wrappers. ➜ pezcode
Do you have a project? Submit it with a pull request

Modules

lava engine

engine producer props

  ➜   depends on app

lava app

app camera forward_shading

benchmark config imgui

  ➜   depends on frame + block + asset

lava frame

argh driver frame gamepad input

render_target renderer swapchain window

  ➜   depends on resource


lava block

attachment block descriptor render_pass subpass

compute_pipeline render_pipeline pipeline pipeline_layout

  ➜   depends on base

lava asset

load_image load_mesh load_texture write_image

  ➜   depends on resource + file

buffer mesh primitive

format image texture

  ➜   depends on base

lava base

base instance memory queue

platform device physical_device

  ➜   depends on util


lava file

file file_system file_utils json_file json

  ➜   depends on core

lava util

log math random thread

hex layer telegram

  ➜   depends on core

lava core

data id misc time types version


Collaborate

Use the issue tracker to report any bug or compatibility issue.

❤️   Thanks to all contributors making liblava flow...



If you want to contribute - we suggest the following:

  1. Fork the official repository
  2. Apply your changes to your fork
  3. Submit a pull request describing the changes you have made

Support


Need help?   Please feel free to ask us on ➜ Discord


Help maintenance and development Every star and follow motivates
paypal GitHub Stars   Twitter URL

License

liblava is licensed under MIT License which allows you to use the software for any purpose you might like - including commercial and for-profit use. However - this library includes several Third-Party libraries which are licensed under their own respective Open Source licenses ➜ They all allow static linking with closed source software.

All copies of liblava must include a copy of the MIT License terms and the copyright notice.


Vulkan and the Vulkan logo are trademarks of the Khronos Group Inc.

Copyright (c) 2018-present - Lava Block OÜ and contributors