Liblava
Modern and easy-to-use library for Vulkan
Install / Use
/learn @liblava/LiblavaREADME
<a href="https://liblava.dev"><img src="docs/assets/liblava.svg"></a>
A modern and easy-to-use library for the Vulkan® API
<br /> <br />lava provides essentials for low-level graphics - suited for prototyping, tooling, profiling and education.
<br />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
<br />In a nutshell
<a href="https://vulkan.org/"> <img align="right" src="docs/assets/Vulkan_RGB_Dec16.svg" width="270"> </a>- 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...
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
|||
|:-|:-|
|
| <br />free download on ➜ itch.io<br /><br /> The collection includes all stages to play around. - You can easily switch between them. |
|||
Stages
|||
|:-|:-|
|
| <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. |
|
| <br />compute pipeline<br /><br />Small demo showcasing how to use a compute pipeline to generate and render a Mandelbrot fractal on the GPU. - A compact example for experimenting with compute-based rendering. |
|
| <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. |
|
| <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! |
|
| <br />generating primitives<br /><br />Switch between basic shapes and use the camera to fly around. - A great start for your next interactive application. |
|
| <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. |
|
| <br />unique classic mesh<br /><br />Where graphics programming always begins. - An example that illustrates how little it actually takes to render a triangle. |
|||
Projects
|||
|:-|:-|
| <img src="https://raw.githubusercontent.com/pezcode/lava-rt/main/demo/res/cubes/screenshot.png"> | <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 |
|||
Modules
lava engine
➜ depends on app
lava app
➜ depends on frame + block + asset
lava frame
➜ depends on resource
<br />lava block
➜ depends on base
lava asset
lava resource
[.
qqbot-media
347.2kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
