Release notes
August 17, 2026 ยท View on GitHub
0.2 - 2026-08-17
BSL improvements
-
Structs can now hold opaque types such as textures and samplers. They can be nested, passed to functions, and returned from them.
struct CombinedTexture { Texture2D tex; SamplerState samp; }; float4 SampleHelper(CombinedTexture ct, float2 uv) { return ct.tex.Sample(ct.samp, uv); } -
Added support for templated structs and functions, including explicit specialization.
template<typename T> struct Pair { T left; T right; }; template<typename T> T Add(T lhs, T rhs) { return lhs + rhs; } template<> float4 Add(float4 lhs, float4 rhs) { return lhs - rhs; }
Shader pipeline
- Shaders can be compiled ahead of time and loaded from a prebuilt store, via the new cook tool and the ShaderRegistry.
- Shader backends are now registered per platform and can load as dynamic libraries, so you can cross-compile shaders for other platforms from a host platform.
- Program bytecode now carries the descriptor tables.
- Generated SPIR-V is optimized with SPIRV-Tools.
GPU work contexts
- Added GpuWorkContext, which owns the GPU state for a single thread or fiber.
- Context owns command buffer pool, parameter set pool, transient scratch memory and a completion tracker.
- Command buffer submission moved from GpuDevice to GpuWorkContext.
- Transient memory allocation moved from GpuDevice to GpuWorkContext.
- TextureUtility and GpuBufferUtility now take a context. RendererMaterial can be used from worker threads through one, and created asynchronously.
Native BC shaders
- Block compression (BC1/3/4/5/6/7) now run using native shaders on the GPU, for a blazing fast compression
- Mip-map generation is now also moved to the GPU
- NVTT is no longer a dependency.
GPU backend unification
- GPU resource tracking and barrier management moved out of the Vulkan backend into the core, so they are now shared by every backend.
- GPU submit thread, swap chain and vertex input manager moved out of the Vulkan backend into the core, so they are now shared by every backend.
- All GPU memory allocators now share a common IGpuAllocator interface.
- Added GpuTimelineFence, refactor command buffer submission and GPU queues so they utilize them internally.
Async compute
- Compute and transfer work can run on their own queues, in parallel with graphics.
- The framework derives the cross-queue synchronization from how each command buffer uses its resources, so no manual semaphore management is needed.
GUI
- CSS supports line height and character spacing, comments, and negative numbers.
- CSS parsing reports errors in more detail.
- Added font families. A family groups the font files that differ only in weight and slant.
- New Font manager auto-discovers and on-demand loads font families and their faces
- Added CSS
font-weightproperty that acceptsnormal,bold, or a number from 100 to 900. - Added CSS
font-styleproperty that acceptsnormal,italicoroblique. - The CSS
font-familyproperty now accepts a family name, or aurl()pointing at a single font file.
Input
- All platform input implementations now sit behind a common IInputBackend interface.
- Gamepads are detected when connected or disconnected while the application runs.
File system
- Asynchronous file I/O on Windows, Linux and macOS, through platform specific file data streams that replace the fstream based one.
- Package loading, internal RTTI operations, the buffered bitstream reader and compression all read through the new asynchronous path.
- The FileSystem::OpenFile API now takes explicit flags for access control and asynchronous access.
- Files are now opened with correct sharing modes, which makes sharing violations easier to detect. Existing sharing violations fixed.
Scripting
- Added ahead-of-time (AOT) compilation support for C# code.
Core
- MemoryDataStream accepts a custom deleter.
- Assert dialogs can be disabled, for unattended runs.
- New console variables dump Vulkan pipeline statistics and pipeline compile times.
- Added TPool.
- All platform specific code lives under a single root Platform directory, so a platform and its dependencies stay isolated.
- Threading primitives and dynamic library handling moved into per-platform headers, so a platform can replace them.
- Platforms can override compiler and linker flags. Importer builds can be disabled, which consoles do not need.
Breaking changes
- The GUI is now evaluated in linear space. Re-import all UI textures tagged as sRGB.
- Vulkan 1.2 is now the minimum required version.
- B3D_ENABLE_TESTS is renamed to B3D_BUILD_TESTS.
- Old API script export-tag is split into separate Assembly and API tags, because the old tag controlled two unrelated things.
0.1 - 2026-05-23
- Initial release.