Vulkan header generator, OOP-style API wrapper, framework and prospective Vulkan-based game engine for Object Pascal
Pascal
227
13,920 commits
updated Oct 2, 2026
[!IMPORTANT] The primary repository has moved to git.rosseaux.net/BeRo1985/pasvulkan. This GitHub repository is kept up-to-date via push mirroring.
A Vulkan-based game engine and application framework for Object Pascal.
PasVulkan started in 2016 as an auto-generated Vulkan header binding for Object Pascal. It has since grown into a complete, self-contained engine: a GPU-driven Vulkan renderer with clustered forward+ shading, several global illumination techniques, hardware ray tracing, a procedural planet renderer, a 2D canvas with signed-distance-field text rendering, a widget toolkit, a software audio mixer with HRTF spatialization, an asset pipeline, a scripting language, a physics engine, a networking library — and even an in-process RISC-V emulator and a local LLM inference engine.
Almost everything is written in Object Pascal from the ground up. There is no C/C++ middleware in the core: image loaders, font rasterization, audio mixing, video decoding, compression, physics and networking are all native Pascal implementations. The only mandatory runtime dependency is the Vulkan loader. On Windows the framework talks to the native Win32 APIs directly and needs nothing else, while SDL 2.x is used as the OS abstraction layer on Linux.
PasVulkan is an open source engine under continuous, active development, and free to use under the zlib license. It is not a packaged product though: there is no stable API promise, no versioned release cycle, and documentation is spread across the source code and the docs/ folder. Expect to read Pascal sources.
Development is driven by the games built with it — the ones in projects/ are the engine's own test bed, and features land when those games need them, not on a roadmap.
The Vulkan.pas binding header (and its vkxml2pas.dpr generator) is usable stand-alone and stays compatible even with the old Delphi 7 compiler. The PasVulkan.*.pas framework units are not — they use generics, operator overloading, advanced records and other modern Object Pascal syntax.
Vulkan.pas — a complete, C-API-style Vulkan header for Object Pascal, auto-generated from vk.xml by vkxml2pas.dpr, so it is always up to date. Currently tracks Vulkan 1.4 (VK_HEADER_VERSION 346), including all registered extensions.PasVulkan.Framework.pas — an object-oriented abstraction over the raw API: instances, devices, queues, command buffers, swap chains, render passes, pipelines, descriptor sets, buffers, images, samplers, synchronization primitives and so on.maxMemoryAllocationCount, with allocation groups for budget tracking and a dedicated visualizer tool.PasVulkan.Raytracing.pas) — BLAS/TLAS construction and management, compaction, build queues, instance and geometry info management, and a cull-mask system.PasVulkan.FrameGraph.pas — a render graph that resolves pass dependencies, allocates and aliases transient resources, and inserts the required barriers and layout transitions automatically, across multiple queues.PasVulkan.Application.pas — a Vulkan-optimized application/screen framework whose overall design mixes VCL/LCL/FCL and libGDX concepts. It handles the whole lifecycle: device selection, swap chain creation and recreation, frame pacing, input, and screen/state management.VK_ERROR_SURFACE_LOST_KHR, VK_ERROR_OUT_OF_DATE_KHR and VK_SUBOPTIMAL_KHR. Critical situations such as VK_ERROR_DEVICE_LOST remain the application's responsibility.PasVulkan.Win32.GameInput.pas for Windows GameInput controller support, and PasVulkan.VirtualReality.pas with an OpenVR backend plus a VR-aware screen class.PasVulkan.Scene3D*.pas implements a strict GPU-driven, clustered forward+ renderer built around an "everything-in-one-single-buffer" design: all vertex, index and material data lives in one buffer per data type, accessed bindlessly, which is what makes GPU culling, single-draw-call batching and hardware ray tracing over the same data possible. See docs/renderer_design.md for the full rationale.
Geometry and culling
docs/scene3d_virtualinstances.md).Materials and lighting
KHR_materials_clearcoat, _sheen, _transmission, _diffuse_transmission, _volume, _ior, _specular, _iridescence, _anisotropy, _dispersion, _emissive_strength, KHR_texture_transform, KHR_texture_basisu, KHR_lights_punctual, KHR_animation_pointer and KHR_node_visibility.EnvironmentMap — static IBL environment.CameraReflectionProbe — a per-frame updated cubemap around the camera.CascadedRadianceHints — RSM-injected cascaded radiance hints with bounce passes.CascadedVoxelConeTracing — cascaded voxelization with cone tracing over voxel mipmaps.DynamicUnifiedGlobalIllumination (DUGI) — a cascaded probe grid traced against the ray tracing TLAS, storing irradiance as spherical harmonics or an octahedral atlas plus an octahedral mean/mean-squared distance term for Chebyshev visibility, which avoids the light leaking of radiance hints. Requires hardware ray tracing.docs/scene3d_decals.md).Transparency
Eight selectable order-independent transparency modes: Direct, spinlock and interlock per-pixel linked-list OIT, LOOPOIT, weighted-blended OIT (WBOIT), moment-based OIT (MBOIT), and deep & fast approximate OIT in spinlock and interlock variants.
Antialiasing, upscaling and post-processing
None, DSAA, FXAA, SMAA, SMAA T2x, MSAA, MSAA+SMAA and TAA.PasVulkan.Scene3D.Planet.pas is a full procedural planet system: GPU heightmap terrain with brush-based editing, blend map layers, tiled LOD, grass rendering with age maps, and a pipe-model water simulation (with FP16/FP32 shader variants selected per GPU) covering flow, settling, shore foam, whitecaps, Gerstner wave displacement, rain splashes and caustics.
PasVulkan.Scene3D.Atmosphere.pas provides a physically based atmosphere with Rayleigh/Mie scattering and absorption, volumetric clouds with coverage/type/wetness maps and cloud shadows, precipitation, and support for multiple atmospheres (double-precision transforms, so several planets can coexist).
PasVulkan.Canvas.pas — a batched 2D canvas with paths, strokes, fills, gradients, clipping, blend modes and transformation stacks, usable stand-alone or composited into the 3D pipeline.PasVulkan.TrueTypeFont.pas / PasVulkan.Font.pas — a native TrueType/OpenType loader with experimental PostScript-flavoured (CFF Type 2) support and a TrueType hinting bytecode interpreter, plus on-the-fly parallelized high-quality 2D signed distance field generation (Practical Analytic 2D SDF Generation, parallelized with PasMP).PasVulkan.VectorPath.pas and PasVulkan.SignedDistanceField2D.pas — vector path handling and SDF generation for shapes and glyphs.PasVulkan.GUI.pas — a retained-mode widget toolkit with a vector-based skin: windows, dialogs, popups, menus, buttons, checkboxes, single- and multi-line text edits, scrollbars, sliders, progress bars, panels, tabs, list boxes, combo boxes, splitters, color wheel/picker, list views, tree views and file dialogs, with fill/box/group/grid/advanced-grid/flow layouts.PasVulkan.Console.pas, PasVulkan.TextEditor.pas (a rope-based text editor core with undo/redo and UTF-8 line cache) and PasTerm-based terminal emulation.PasVulkan.PasHTMLDownCanvasRenderer.pas — Markdown rendering onto the canvas.PasVulkan.Audio.pas is a complete software mixer running on its own thread with a lock-free command queue:
VK_KHR_video_decode_h264 — a FlexibleVideo container can carry an H.264 Annex-B elementary stream alongside its native stream, and where the GPU exposes Vulkan video decode the player decodes it on the GPU, falling back to the container's own decoder otherwise. The Pascal side is the bitstream front-end (Annex-B NAL splitting, SPS/PPS/slice header and POC parsing) driving the Vulkan video session, DPB and NV12 output.PasVulkan.VirtualFileSystem.pas — a layered virtual file system that transparently overlays loose files and archives.PasVulkan.Compression.pas facade.gltf2sam tool).PasVulkan.Math.pas — vectors, matrices, quaternions, AABBs, spheres, frustums, with swizzling and a full double-precision counterpart in PasVulkan.Math.Double.pas.PasVulkan.EntityComponentSystem.pas — an ECS with registered component types, system dependency resolution and serialization.PasVulkan.POCA.pas and PasVulkan.POCA.Scene3D.pas. It is used for real game logic: the HUD, context menus and much of the gameplay in supercubi are written in POCA. Even some shader-side data (sample kernels and lookup tables) is generated by POCA scripts at build time.PasVulkan.PasRISCVEmulator.pas, so a full Linux system can run inside an application.PasVulkan.Profiler.pas, PasVulkan.FrameTrace.pas, PasVulkan.TimerQuery.pas and a PasMP profiler history view for CPU and GPU timing.PasVulkan.Steamworks.pas + a framework layer) for achievements, cloud saves, lobbies and overlay handling, loaded dynamically so builds run without Steam.src/tools/: the project manager, BRDF lookup texture generator, glTF→SAM converter, PNG→raw converter, bin2pas, a Vulkan memory visualizer, a Scene3D dump analyzer, swizzle code generation, Steamworks layout/vtable/dispatch verifiers, and training tools for the DFAOIT and upscaler networks.| Platform | Architectures | Notes |
|---|---|---|
| Windows | x86-32, x86-64 | native Win32 backend, no SDL, FPC and Delphi, primary development and shipping target |
| Linux | x86-32, x86-64, ARM32, AArch64 | X11 and Wayland via SDL 2, primary development target |
| Android | x86-32, x86-64, ARM32, AArch64 | via the project manager and Android Studio toolchain |
| macOS / iOS | x86-64, AArch64 | through the MoltenVK wrapper — experimental and largely untested |
pasvulkan/
src/ Engine sources (Vulkan.pas, PasVulkan.*.pas)
assets/shaders/ GLSL shaders (scene3d, canvas, virtualreality)
tools/ Engine tools (project manager, converters, verifiers, ...)
externals/ Git submodules (poca, kraft, pasmp, rnl, pasllm, pasriscv, ...)
projects/ Games, examples and test projects
docs/ Design and subsystem documentation
tests/ Engine-level tests
glslangValidator when recompiling shaders) and a Vulkan-capable GPU with up-to-date drivers.The repository has a long history and large assets. If a plain clone is too slow or too large:
git clone --single-branch --depth 1 --recursive https://github.com/BeRo1985/pasvulkan.git pasvulkan
or via SSH:
git clone --single-branch --depth 1 --recursive git@github.com:BeRo1985/pasvulkan.git pasvulkan
If the transfer still fails, disabling git's compression can help (note that this is a global setting):
git config --global core.compression 0
Afterwards, fetch and update the submodules:
./initsubmodules # initsubmodules.bat on Windows
./updatesubmodules # updatesubmodules.bat on Windows
The project manager handles asset compilation, cross-target builds and project creation. Build it once:
./compileprojectmanager # compileprojectmanager.bat on Windows
Then, for the example project:
| Step | Windows | *nix | Description |
|---|---|---|---|
| 1. | projectmanager compileassets examples | ./projectmanager compileassets examples | Compiles the asset files |
| 2. | projectmanager build examples | ./projectmanager build examples | Compiles the code |
| 3. | projectmanager run examples | ./projectmanager run examples | Starts the binary |
Creating a new project:
| Step | Windows | *nix | Description |
|---|---|---|---|
| 1. | projectmanager create [yourprojectname] | ./projectmanager create [yourprojectname] | Creates a new project from the template |
Important: the project name must be a valid lowercase Pascal identifier and a valid Java identifier and a valid file name, all at the same time.
Run projectmanager -h for the full option and target list. build accepts explicit targets such as fpc-x86_64-linux, fpc-x86_64-windows, fpc-aarch64-android or delphi-x86_64-windows.
Every project also carries a plain .lpi (Lazarus) and .dpr/.dproj (Delphi) in its src/ directory and can be built without the project manager:
cd projects/gltfviewer/src
lazbuild -B gltfviewer.lpi
-B (full rebuild) is recommended — incremental builds of the larger projects can trip FPC internal errors.
cd src/assets/shaders/scene3d
./compileshaders.sh # compileshaders.bat on Windows
| Project | Description |
|---|---|
supercubi | A 2D jump'n'run whose gameplay, physics and rendering are almost entirely written in POCA — the scripting and 2D testbed. |
gltfviewer | A glTF 2.0 / OBJ / FBX model viewer used to test and debug loading, PBR materials, animation and the renderer in isolation. |
examples | The example/demo application: triangle, cube, canvas, GUI, model and dragon screens. |
videoexample, pocaexample, consoleexample, markdownviewertest | Focused feature demos. |
physics2dtest, sdfmeshgen | Testbeds for physics and signed distance field mesh generation. |
template | The skeleton used by projectmanager create. |
All of these are separate projects of mine, included here as submodules under externals/:
| Library | Purpose |
|---|---|
| POCA | ECMAScript-like scripting language |
| Kraft | 3D physics engine |
| PasMP | Parallel processing / job system |
| RNL | Realtime UDP networking library |
| PasGLTF | glTF 2.0 loader and writer |
| PasJSON | JSON library |
| PasDblStrUtils | Exact float ↔ string conversion |
| PUCU | Unicode utilities |
| FLRE | Regular expressions |
| PasHTMLDown | Markdown library |
| PasTerm | Terminal emulator core |
| PasRISCV | RV64GCV/RVA23 emulator |
| PasLLM | LLM inference engine |
| Pinja | Jinja-subset template engine |
Design documents live in docs/:
renderer_design.md — renderer architecture, why forward+, the single-buffer design, Hi-Z two-pass occlusion cullingscene3d_virtualinstances.md, scene3d_decals.mdmemory_management_in_pasvulkan.md, framepacing.mdcanvas_transparency_rendering.md, vectorpath.mdpocascriptapi.adoc — the PasVulkan POCA scripting APICreating is my passion, and with your support, I can keep it alive. Support my work and help me continue innovating. Every contribution makes a difference: You can donate and support me here. Thank you!
Copyright (C) 2016-2026, Benjamin Rosseaux (benjamin@rosseaux.de)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgement in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
The engine itself is zlib licensed. Some submodules under externals/ use different licenses — FLRE is LGPL v2.1 with static-linking exception, PasLLM is AGPL v3 — so check each submodule's own license file before shipping.
For more recent showcase videos see Youtube playlist
9 followers · starred Nov 2025
Pascal
90.4%
GLSL
4.1%
C
3.1%
Java
1.7%
Vulkan header generator, OOP-style API wrapper, framework and prospective Vulkan-based game engine for Object Pascal
Pascal
227
13,920 commits
updated Oct 2, 2026
[!IMPORTANT] The primary repository has moved to git.rosseaux.net/BeRo1985/pasvulkan. This GitHub repository is kept up-to-date via push mirroring.
A Vulkan-based game engine and application framework for Object Pascal.
PasVulkan started in 2016 as an auto-generated Vulkan header binding for Object Pascal. It has since grown into a complete, self-contained engine: a GPU-driven Vulkan renderer with clustered forward+ shading, several global illumination techniques, hardware ray tracing, a procedural planet renderer, a 2D canvas with signed-distance-field text rendering, a widget toolkit, a software audio mixer with HRTF spatialization, an asset pipeline, a scripting language, a physics engine, a networking library — and even an in-process RISC-V emulator and a local LLM inference engine.
Almost everything is written in Object Pascal from the ground up. There is no C/C++ middleware in the core: image loaders, font rasterization, audio mixing, video decoding, compression, physics and networking are all native Pascal implementations. The only mandatory runtime dependency is the Vulkan loader. On Windows the framework talks to the native Win32 APIs directly and needs nothing else, while SDL 2.x is used as the OS abstraction layer on Linux.
PasVulkan is an open source engine under continuous, active development, and free to use under the zlib license. It is not a packaged product though: there is no stable API promise, no versioned release cycle, and documentation is spread across the source code and the docs/ folder. Expect to read Pascal sources.
Development is driven by the games built with it — the ones in projects/ are the engine's own test bed, and features land when those games need them, not on a roadmap.
The Vulkan.pas binding header (and its vkxml2pas.dpr generator) is usable stand-alone and stays compatible even with the old Delphi 7 compiler. The PasVulkan.*.pas framework units are not — they use generics, operator overloading, advanced records and other modern Object Pascal syntax.
Vulkan.pas — a complete, C-API-style Vulkan header for Object Pascal, auto-generated from vk.xml by vkxml2pas.dpr, so it is always up to date. Currently tracks Vulkan 1.4 (VK_HEADER_VERSION 346), including all registered extensions.PasVulkan.Framework.pas — an object-oriented abstraction over the raw API: instances, devices, queues, command buffers, swap chains, render passes, pipelines, descriptor sets, buffers, images, samplers, synchronization primitives and so on.maxMemoryAllocationCount, with allocation groups for budget tracking and a dedicated visualizer tool.PasVulkan.Raytracing.pas) — BLAS/TLAS construction and management, compaction, build queues, instance and geometry info management, and a cull-mask system.PasVulkan.FrameGraph.pas — a render graph that resolves pass dependencies, allocates and aliases transient resources, and inserts the required barriers and layout transitions automatically, across multiple queues.PasVulkan.Application.pas — a Vulkan-optimized application/screen framework whose overall design mixes VCL/LCL/FCL and libGDX concepts. It handles the whole lifecycle: device selection, swap chain creation and recreation, frame pacing, input, and screen/state management.VK_ERROR_SURFACE_LOST_KHR, VK_ERROR_OUT_OF_DATE_KHR and VK_SUBOPTIMAL_KHR. Critical situations such as VK_ERROR_DEVICE_LOST remain the application's responsibility.PasVulkan.Win32.GameInput.pas for Windows GameInput controller support, and PasVulkan.VirtualReality.pas with an OpenVR backend plus a VR-aware screen class.PasVulkan.Scene3D*.pas implements a strict GPU-driven, clustered forward+ renderer built around an "everything-in-one-single-buffer" design: all vertex, index and material data lives in one buffer per data type, accessed bindlessly, which is what makes GPU culling, single-draw-call batching and hardware ray tracing over the same data possible. See docs/renderer_design.md for the full rationale.
Geometry and culling
docs/scene3d_virtualinstances.md).Materials and lighting
KHR_materials_clearcoat, _sheen, _transmission, _diffuse_transmission, _volume, _ior, _specular, _iridescence, _anisotropy, _dispersion, _emissive_strength, KHR_texture_transform, KHR_texture_basisu, KHR_lights_punctual, KHR_animation_pointer and KHR_node_visibility.EnvironmentMap — static IBL environment.CameraReflectionProbe — a per-frame updated cubemap around the camera.CascadedRadianceHints — RSM-injected cascaded radiance hints with bounce passes.CascadedVoxelConeTracing — cascaded voxelization with cone tracing over voxel mipmaps.DynamicUnifiedGlobalIllumination (DUGI) — a cascaded probe grid traced against the ray tracing TLAS, storing irradiance as spherical harmonics or an octahedral atlas plus an octahedral mean/mean-squared distance term for Chebyshev visibility, which avoids the light leaking of radiance hints. Requires hardware ray tracing.docs/scene3d_decals.md).Transparency
Eight selectable order-independent transparency modes: Direct, spinlock and interlock per-pixel linked-list OIT, LOOPOIT, weighted-blended OIT (WBOIT), moment-based OIT (MBOIT), and deep & fast approximate OIT in spinlock and interlock variants.
Antialiasing, upscaling and post-processing
None, DSAA, FXAA, SMAA, SMAA T2x, MSAA, MSAA+SMAA and TAA.PasVulkan.Scene3D.Planet.pas is a full procedural planet system: GPU heightmap terrain with brush-based editing, blend map layers, tiled LOD, grass rendering with age maps, and a pipe-model water simulation (with FP16/FP32 shader variants selected per GPU) covering flow, settling, shore foam, whitecaps, Gerstner wave displacement, rain splashes and caustics.
PasVulkan.Scene3D.Atmosphere.pas provides a physically based atmosphere with Rayleigh/Mie scattering and absorption, volumetric clouds with coverage/type/wetness maps and cloud shadows, precipitation, and support for multiple atmospheres (double-precision transforms, so several planets can coexist).
PasVulkan.Canvas.pas — a batched 2D canvas with paths, strokes, fills, gradients, clipping, blend modes and transformation stacks, usable stand-alone or composited into the 3D pipeline.PasVulkan.TrueTypeFont.pas / PasVulkan.Font.pas — a native TrueType/OpenType loader with experimental PostScript-flavoured (CFF Type 2) support and a TrueType hinting bytecode interpreter, plus on-the-fly parallelized high-quality 2D signed distance field generation (Practical Analytic 2D SDF Generation, parallelized with PasMP).PasVulkan.VectorPath.pas and PasVulkan.SignedDistanceField2D.pas — vector path handling and SDF generation for shapes and glyphs.PasVulkan.GUI.pas — a retained-mode widget toolkit with a vector-based skin: windows, dialogs, popups, menus, buttons, checkboxes, single- and multi-line text edits, scrollbars, sliders, progress bars, panels, tabs, list boxes, combo boxes, splitters, color wheel/picker, list views, tree views and file dialogs, with fill/box/group/grid/advanced-grid/flow layouts.PasVulkan.Console.pas, PasVulkan.TextEditor.pas (a rope-based text editor core with undo/redo and UTF-8 line cache) and PasTerm-based terminal emulation.PasVulkan.PasHTMLDownCanvasRenderer.pas — Markdown rendering onto the canvas.PasVulkan.Audio.pas is a complete software mixer running on its own thread with a lock-free command queue:
VK_KHR_video_decode_h264 — a FlexibleVideo container can carry an H.264 Annex-B elementary stream alongside its native stream, and where the GPU exposes Vulkan video decode the player decodes it on the GPU, falling back to the container's own decoder otherwise. The Pascal side is the bitstream front-end (Annex-B NAL splitting, SPS/PPS/slice header and POC parsing) driving the Vulkan video session, DPB and NV12 output.PasVulkan.VirtualFileSystem.pas — a layered virtual file system that transparently overlays loose files and archives.PasVulkan.Compression.pas facade.gltf2sam tool).PasVulkan.Math.pas — vectors, matrices, quaternions, AABBs, spheres, frustums, with swizzling and a full double-precision counterpart in PasVulkan.Math.Double.pas.PasVulkan.EntityComponentSystem.pas — an ECS with registered component types, system dependency resolution and serialization.PasVulkan.POCA.pas and PasVulkan.POCA.Scene3D.pas. It is used for real game logic: the HUD, context menus and much of the gameplay in supercubi are written in POCA. Even some shader-side data (sample kernels and lookup tables) is generated by POCA scripts at build time.PasVulkan.PasRISCVEmulator.pas, so a full Linux system can run inside an application.PasVulkan.Profiler.pas, PasVulkan.FrameTrace.pas, PasVulkan.TimerQuery.pas and a PasMP profiler history view for CPU and GPU timing.PasVulkan.Steamworks.pas + a framework layer) for achievements, cloud saves, lobbies and overlay handling, loaded dynamically so builds run without Steam.src/tools/: the project manager, BRDF lookup texture generator, glTF→SAM converter, PNG→raw converter, bin2pas, a Vulkan memory visualizer, a Scene3D dump analyzer, swizzle code generation, Steamworks layout/vtable/dispatch verifiers, and training tools for the DFAOIT and upscaler networks.| Platform | Architectures | Notes |
|---|---|---|
| Windows | x86-32, x86-64 | native Win32 backend, no SDL, FPC and Delphi, primary development and shipping target |
| Linux | x86-32, x86-64, ARM32, AArch64 | X11 and Wayland via SDL 2, primary development target |
| Android | x86-32, x86-64, ARM32, AArch64 | via the project manager and Android Studio toolchain |
| macOS / iOS | x86-64, AArch64 | through the MoltenVK wrapper — experimental and largely untested |
pasvulkan/
src/ Engine sources (Vulkan.pas, PasVulkan.*.pas)
assets/shaders/ GLSL shaders (scene3d, canvas, virtualreality)
tools/ Engine tools (project manager, converters, verifiers, ...)
externals/ Git submodules (poca, kraft, pasmp, rnl, pasllm, pasriscv, ...)
projects/ Games, examples and test projects
docs/ Design and subsystem documentation
tests/ Engine-level tests
glslangValidator when recompiling shaders) and a Vulkan-capable GPU with up-to-date drivers.The repository has a long history and large assets. If a plain clone is too slow or too large:
git clone --single-branch --depth 1 --recursive https://github.com/BeRo1985/pasvulkan.git pasvulkan
or via SSH:
git clone --single-branch --depth 1 --recursive git@github.com:BeRo1985/pasvulkan.git pasvulkan
If the transfer still fails, disabling git's compression can help (note that this is a global setting):
git config --global core.compression 0
Afterwards, fetch and update the submodules:
./initsubmodules # initsubmodules.bat on Windows
./updatesubmodules # updatesubmodules.bat on Windows
The project manager handles asset compilation, cross-target builds and project creation. Build it once:
./compileprojectmanager # compileprojectmanager.bat on Windows
Then, for the example project:
| Step | Windows | *nix | Description |
|---|---|---|---|
| 1. | projectmanager compileassets examples | ./projectmanager compileassets examples | Compiles the asset files |
| 2. | projectmanager build examples | ./projectmanager build examples | Compiles the code |
| 3. | projectmanager run examples | ./projectmanager run examples | Starts the binary |
Creating a new project:
| Step | Windows | *nix | Description |
|---|---|---|---|
| 1. | projectmanager create [yourprojectname] | ./projectmanager create [yourprojectname] | Creates a new project from the template |
Important: the project name must be a valid lowercase Pascal identifier and a valid Java identifier and a valid file name, all at the same time.
Run projectmanager -h for the full option and target list. build accepts explicit targets such as fpc-x86_64-linux, fpc-x86_64-windows, fpc-aarch64-android or delphi-x86_64-windows.
Every project also carries a plain .lpi (Lazarus) and .dpr/.dproj (Delphi) in its src/ directory and can be built without the project manager:
cd projects/gltfviewer/src
lazbuild -B gltfviewer.lpi
-B (full rebuild) is recommended — incremental builds of the larger projects can trip FPC internal errors.
cd src/assets/shaders/scene3d
./compileshaders.sh # compileshaders.bat on Windows
| Project | Description |
|---|---|
supercubi | A 2D jump'n'run whose gameplay, physics and rendering are almost entirely written in POCA — the scripting and 2D testbed. |
gltfviewer | A glTF 2.0 / OBJ / FBX model viewer used to test and debug loading, PBR materials, animation and the renderer in isolation. |
examples | The example/demo application: triangle, cube, canvas, GUI, model and dragon screens. |
videoexample, pocaexample, consoleexample, markdownviewertest | Focused feature demos. |
physics2dtest, sdfmeshgen | Testbeds for physics and signed distance field mesh generation. |
template | The skeleton used by projectmanager create. |
All of these are separate projects of mine, included here as submodules under externals/:
| Library | Purpose |
|---|---|
| POCA | ECMAScript-like scripting language |
| Kraft | 3D physics engine |
| PasMP | Parallel processing / job system |
| RNL | Realtime UDP networking library |
| PasGLTF | glTF 2.0 loader and writer |
| PasJSON | JSON library |
| PasDblStrUtils | Exact float ↔ string conversion |
| PUCU | Unicode utilities |
| FLRE | Regular expressions |
| PasHTMLDown | Markdown library |
| PasTerm | Terminal emulator core |
| PasRISCV | RV64GCV/RVA23 emulator |
| PasLLM | LLM inference engine |
| Pinja | Jinja-subset template engine |
Design documents live in docs/:
renderer_design.md — renderer architecture, why forward+, the single-buffer design, Hi-Z two-pass occlusion cullingscene3d_virtualinstances.md, scene3d_decals.mdmemory_management_in_pasvulkan.md, framepacing.mdcanvas_transparency_rendering.md, vectorpath.mdpocascriptapi.adoc — the PasVulkan POCA scripting APICreating is my passion, and with your support, I can keep it alive. Support my work and help me continue innovating. Every contribution makes a difference: You can donate and support me here. Thank you!
Copyright (C) 2016-2026, Benjamin Rosseaux (benjamin@rosseaux.de)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgement in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
The engine itself is zlib licensed. Some submodules under externals/ use different licenses — FLRE is LGPL v2.1 with static-linking exception, PasLLM is AGPL v3 — so check each submodule's own license file before shipping.
For more recent showcase videos see Youtube playlist
9 followers · starred Nov 2025
Pascal
90.4%
GLSL
4.1%
C
3.1%
Java
1.7%