Skip to content
Devin edited this page Apr 27, 2026 · 11 revisions

VCK · Vulkan Core Kit

Tiny Vulkan helper layer. One header. You write the renderer.

VCK stands behind you and hands you things when you need them. It never reaches over your shoulder and touches anything you didn't ask for. Default cfg: a reliable V6. Full cfg: V8 with a supercharger. Same engine underneath. Every knob that's off costs zero.

#include "VCK.h"

That's the whole include surface.


Where to go

You want to… Read
Build the repo and see something on screen Quick Start
Walk through a working app, line by line Your First App
Understand every cfg knob Understanding cfg
Load shaders, declare a vertex layout, push constants Guides · Shaders
Render a scene with multiple meshes Guides · Scene
Add a free-look camera (yaw / pitch / GLFW) Guides · Flying Camera
Drop a textured ground plane Guides · Flat Plane
Build a capsule for a character proxy Guides · Capsule
Wire step + jump physics Guides · Step & Jump
Look up a class signature Core API · Expansion API · Execution Layer · VMM
Browse copy-paste recipes Cookbook
See what every example demonstrates Examples
Compile on Windows / Linux / macOS Build
Read the design rules Design

Layers

core/        VkInstance, VkDevice, VkSwapchainKHR, VkPipeline, VkCommandPool, VkSync
  ↓
expansion/   meshes, textures, depth, framebuffers, descriptors, VertexLayout, PushConstants, Primitives
  ↓
execution/   FrameScheduler, JobGraph, GpuSubmissionBatcher, DebugTimeline
  ↓
vmm/         (optional) staging ring, transient pool, persistent pool, lifetime tags
  ↓
your renderer

Each layer only depends on the layers above it. Expansion never touches execution. Core never touches expansion. Skip whichever layers you don't want — every uninitialised module costs zero (rule 19).


Lifecycle

Init     Window → Context → Device → Swapchain → Pipeline → Command → Sync → expansion → frame loop
Shutdown                                                                  ← reverse order

vkDeviceWaitIdle is correct exactly once: at shutdown. The runtime hot path never calls it (rule 4). Resize uses HandleLiveResize; the scheduler-aware overload drains via FrameScheduler::DrainInFlight so independent compute / transfer queues keep moving.


VCK.h is the single source of truth for the public API. The wiki is the friend; VCK.h is the spec.

VCK · Vulkan Core Kit

Getting Started

Guides

Reference

More


Single source of truth for the full API surface is the doc block at the top of VCK.h.

Clone this wiki locally