๐๐ Project Island is an experimental, hot-reloading Vulkan Renderer for Linux and Windows, written in C/C++.
MIT License
Bot releases are hidden (Show)
This release adds a few quality-of-life improvements to dealing with images. The le_resource_manager
has been rewritten so that it becomes very easy to hot-reload any images. If an image is added via the resource manager and tagged as watched, any changes to the original image will trigger a resource reload. This even works if the updated image has different file size, format, or dimensions.
le_pixels
has been rewritten from the ground up - image decoders now must implement a generic interface, which means that the resource manager can interact with them in an abstract way (shout-out to Barbara Liskov) - and you can implement & register new image decoders with the resource manager at run-time and get all the benefits of resource hot-reloading for any new image format for free.
When you register an image decoder with a resource manager, you give a file extension for which to use this decoder. You can register new decoders for new filetypes, or override the defaults at runtime. The resource manager by defaults loads decoders from le_pixels
for .jpg
, jpeg
, .png
, ...
To make image loading more efficient, the renderer is now able to directly map GPU memory - this means that image decoders may read their pixels directly into GPU memory - and the new version of le_resource_manager
certainly does.
stb_image
to latest version./bin
--- this should keep things a bit cleanereR8Unorm
for a grayscale image)le_imgui
self-contained by using pre-compiled shaders, and by embedding default font (you don't have to add any resources anymore when using le_imgui
)le_tweaks
- making tweaks more robust after hot-reloadingFull Changelog: https://github.com/tgfrerer/island/compare/v0.12.0-vk-video-decode...v0.13.0-image-hot-reload
Published by tgfrerer 10 months ago
Hardware accelerated video decoding (H.264, for now) using Vulkan Video Decode.
Island's new le_video_decoder
module allows you to use your GPU most efficiently by shifting video processing onto dedicated video decode hardware. Instead of using an extra dependency, le_video_decoder
implements this by using the new Vulkan Video API, therefore keeping video decoding perfectly on the GPU.
The new video decoder module provides a simple API that aims to abstract away any gnarly sync issues: the latest decoded frame is made available as a plain image resource handle which synchronizes nicely and implicitly with Island's rendergraph. By default, videos will loop perfectly; YCrCb
conversion happens automatically using specialized Vulkan samplers. A new example application shows the video player in action.
Adding and implementing Vulkan Video Decode has been a long time in the making; This release has been tested on Linux (ubuntu 22.04 LTS) and Windows (11) and an Nvidia 4090 GPU, where I got to comfortably decode and play 16 1920x1080@50fps videos simultaneously.
Other GPUs will most likely work, too as long as they support a Video Decode Queue (it's recommended to update drivers, as Vulkan Video is still fairly new). I'd love to find out how this fares on Intel and/or AMD GPUs - test reports, PRs or hardware donations (so I can test & implement fixes) are most welcome ;)
There are a lot more features and bug fixes in this release.
__ycbcr__
in sampler codeTWEAKS
: refactor near-instant code-tweak mechanism by putting it into its own module, le_tweaks
-- see le_tweaks for usage hintsFull Changelog: https://github.com/tgfrerer/island/compare/v0.11.0-tracy...v0.12.0-vk-video-decode
Published by tgfrerer over 1 year ago
You can profile any Island app by compiling it with the line add_compile_definitions( TRACY_ENABLE )
added to its project's top-most CMakeLists.txt
file. When the app runs, it will connect to the Tracy Profiler. Tracy will give you real-time insight into where the app spends CPU time.
Profiling works with Debug and Release builds - both on Linux and Windows. Profiling works with hot-reloading - you can add and remove profiling primitives while hot-reloading and profiling.
The Tracy profiler is a standalone, separate app. You can build it from source from the code contained in the tracy submodule (found in modules/le_tracy/3rdparty/tracy/profiler/build/
)
You can profile application code regions by adding the le_tracy
module, and including the le_tracy.h
header. This header gives access to all the Tracy profiling primitives, if tracing is enabled via TRACY_ENABLE
(see above).
When tracing is not enabled (as is the default), tracing primitives melt away to no-ops.
Tracy is included via a submodule - you need to invoke
git submodule init
git submodule update
for the tracy source code to be checked out.
Full Changelog: https://github.com/tgfrerer/island/compare/v0.10.0-renderpass-ergonomics...v0.11.0-tracy
Published by tgfrerer over 1 year ago
le::GraphicsEncoder
, le::TransferEncoder
, le::ComputeEncoder
, le::RtxEncoder
. You must choose one of these instead of the deprecated general le::Encoder
. Based on which specialization you choose, this narrows down the choice of operations that can be done with an encoder to whatever is allowed with this particular type of encoder; this makes it harder to accidentally issue an encoder command which is not allowed in the context of a particular type of Renderpass (e.g. issueing a compute
command in a Draw Pass...LE_SETTING_BACKEND_SHOULD_CHECK_ARGUMENT_STATE
, false by default on Release buildsCommandBindVertexBuffers
implementationFull Changelog: https://github.com/tgfrerer/island/compare/v0.9.0-gamepad...v0.10.0-renderpass-ergonomics
Published by tgfrerer over 1 year ago
le_window_settings
allow windows to opt in/out of event stream for specific gamepad idsGamepad control for the default camera controller is a no-code change; any apps that use the default camera controller can now additionally be controlled via gamepad, if a gamepad is detected. You just need to connect a gamepad, that's all.
Full Changelog: https://github.com/tgfrerer/island/compare/0.8.0-dynamic-swapchains...v0.9.0-gamepad
Published by tgfrerer over 1 year ago
remove index-based swapchain getters: you must now pass an (opaque) swapchain handle to query swapchains. You will receive a swapchain handle when adding a swapchain, and you can query the renderer for available swapchain handles.
refactor shader pipeline generator - shader handle is now generated via parameters fingerprint, which makes for better cache hits and fewer shader recompilations.
improved compilation times (about 3-4s for full recompile using clang) by separating renderer.hpp
and renderer.h
:
renderer.hpp contains the c++ faรงades which are templated, and only of use to application code, while renderer.h may be used by others who depend on renderer. Application code should include renderer.hpp
. remove unused header includes
updated to vulkan version 1.3.236
updated volk
to 1.3.236
updated vk_mem_alloc
updated spirv_reflect
updated codegen scripts, and generated code for vk 1.3.236
cleanup api to better conform c-header style: deprecate const &
passing in public api parameters
Full Changelog: https://github.com/tgfrerer/island/compare/v0.7.0...0.8.0-dynamic-swapchains
Published by tgfrerer almost 2 years ago
le_console
. Add this module to your app and it will listen on localhost:3535 once you start its server. If you connect to the console via telnet
or similar and then type tty
, you enter an interactive console, from where you can interact with the app by setting or reading LE_SETTINGS, and by monitoring le_log
logging events.LE_SETTING_SHOULD_USE_VALIDATION_LAYERS
.Full Changelog: https://github.com/tgfrerer/island/compare/v0.6.0...v0.7.0
Published by tgfrerer about 2 years ago
LE_GET_SETTING
- persistent settings that can be set/tweaked and accessed across all modules.le_settings
module - a module which allows you to list all global settings and their respective type information (unstable)le_camera
remove inclusion of glm
from le_camera.h
create_project.py
, relative paths are now relative to current directoryFull Changelog: https://github.com/tgfrerer/island/compare/v0.5.0...v0.6.0
Published by tgfrerer over 2 years ago
le::RenderGraph
synchronisation2
for synchronisation, clarify synchronisation in commentsle::
namespace is usedFull Changelog: https://github.com/tgfrerer/island/compare/v0.4.0...v0.5.0
Published by tgfrerer over 3 years ago
Refactor resource handles to be type-safe, and not based on hashes anymore.
le_img_resource_handle
, le_buf_resource_handle
, le_tlas_resource_handle
, le_blas_resource_handle
can all be downcast to le_resource_handle
, but api methods may request specific handle type for extra safety.Published by tgfrerer over 3 years ago
Latest features:
le_log