Home

Awesome

<br /> <a href="https://liblava.dev"> <img align="left" src="docs/assets/liblava_200px.png" width="110"> </a> <br />

<a href="https://liblava.dev"><img src="docs/assets/liblava.svg"></a>

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

<br />

version License CodeFactor   Discord Donate Twitter Follow

<br />

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.

<br />

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

<br />

In a nutshell

<a href="https://vulkan.org/"> <img align="right" src="docs/assets/Vulkan_RGB_Dec16.svg" width="270"> </a> <br />

engine app frame   block asset resource base   file util core

<br />

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();
}
<br />

Demos

demolava demo<br />free download on ➜ itch.io<br /><br /> The collection includes all stages to play around. - You can easily switch between them.

Stages

lightspawn<br />deferred shading + offscreen rendering<br /><br />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.
spawnlight<br />uniform buffer + camera<br /><br />This loads a very large mesh from file and simply textures it. - Use your gamepad to control the camera if there is one around.
lamplamp<br />push constants to shader<br /><br />Classic lamp to relax and where colors can be easily switched. - Unfortunately it also consumes power - so be aware!
shapesshapes<br />generating primitives<br /><br />Switch between basic shapes and use the camera to fly around. - A great start for your next interactive application.
genericsgenerics<br />float, double & int meshes<br /><br />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.
triangletriangle<br />unique classic mesh<br /><br />Where graphics programming always begins. - An example that illustrates how little it actually takes to render a triangle.
<br />

Projects

<img src="https://raw.githubusercontent.com/pezcode/lava-rt/main/demo/res/cubes/screenshot.png">rt cubes<br /> raytraced reflecting cubes<br /><br />Vulkan raytracing with liblava<br />Support for the Vulkan KHR ray tracing extensions with idiomatic wrappers. ➜ pezcode
Do you have a project? Submit it with a pull request
<br />

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

<br />

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

lava resource

buffer mesh primitive

format image texture

  ➜   depends on base

lava base

base instance memory queue

platform device physical_device

  ➜   depends on util

<br />

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

<br />

Collaborate

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

:heart:   Thanks to all contributors making liblava flow...

<br /> <br />

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
<br />

Support

<br />

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

<br />
Help maintenance and developmentEvery star and follow motivates
paypalGitHub Stars   Twitter URL
<br />

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.

<br />

Vulkan and the Vulkan logo are trademarks of the <a href="http://www.khronos.org" target="_blank">Khronos Group Inc.</a>

Copyright (c) 2018-present - <a href="https://lava-block.com">Lava Block OÜ</a> and contributors

<br /> <br />

<a href="https://liblava.dev"><img src="docs/assets/liblava_200px.png" width="50"></a>