VKFS is a cross-platform and window system independ C++ framework that allows you to quickly create basic Vulkan objects for further work, such as Instance, Physical Device, Device, Command queues, Command buffer and synchronization objects.
Note: The framework is currently under development and may contain bugs or some missing functionality.
The framework is fully working. If you notice a bug/missing functionality, write about it in issues tab. I will add new features as needed.
Note: These tutorials assume that you already have a working environment with a configured compiler and linked libraries.
The object that creates an Instance of your application.
Example:
auto instance = new VKFS::Instance("Application Name", "Engine name", [instanceExtensions: std::vector<const char*>], [enableValidationLayers: bool], [OPTIONAL API_VERSION=VK_API_VERSION_1_2: uint32_t]);The object that picks up VkPhysicalDevice, creates VkDevice based on it, as well as command queues.
Example:
auto device = new VKFS::Device(instance, [deviceExtensions: std::vector<const char*>]);An object that creates a swap chain and renderpass for it.
Example:
auto swapchain = new VKFS::Swapchain(device, [windowWidth: int], [windowHeight: int]);The object that creates VkDescriptorSetLayout, VkDescriptorSet and everything necessary for this. Allows you to create a Descriptor for UBO, Sampler or Storage Buffer in just two lines.
Example:
auto descriptor = new VKFS::Descriptor(device, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, [shaderStage: VkShaderStageFlagBits]);
descriptor->createUBOSet(sizeof(YourUBOStructure));OR
auto descriptor = new VKFS::Descriptor(device, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, [shaderStage: VkShaderStageFlagBits]);
descriptor->createSamplerSet([imageInfo: VkDescriptorImageInfo]);An object that allows you to conveniently load and create a VkShaderModule
Example:
auto vertex = new VKFS::ShaderModule(device, "path/to/spv");A simple abstraction over VkPipeline and VkPipelineLayout objects. Perfect for those who want
to get rid of the confusing boilerplate code and those who do not need a lot of settings
Example:
auto pipeline = new VKFS::Pipeline(device, [vertexBindingDescription: VkVertexInputBindingDescription], [attributesDescription: std::vector<VkVertexInputAttributeDescription>],
[renderPass: VkRenderPass], [descriptors: std::vector<VKFS::Descriptor*>]);
pipeline->addShader(VKFS::VERTEX, vertex);
pipeline->addShader(VKFS::FRAGMENT, fragment);
...
pipeline->addShader([type: VKFS::ShaderType], [vertexShader: VKFS::ShaderModule*]); // You can add vertex, fragment and geometry shaders to pipeline
pipeline->build(); // Build the pipelineAfter building you can get your ready to use objects:
pipeline->getPipelineLayout(); // Returns VkPipelineLayout
pipeline->getPipeline(); // Returns VkPipelineYou can also set some additional parameters(before pipeline->build();):
pipeline->enablePushConstants(sizeof(YourPushConstantsStruct), [shaderType: VKFS::ShaderType]); // Enables push constants for your pipeline.
pipeline->enableDepthTest([state: bool]); // Enables or disables depth test. Enabled by default
pipeline->setCullMode([mode: VKFS::CullMode]); // Enables specified culling mode
pipeline->disableAttachment([attachment: VKFS::Attachment]); // Disables color or depth attachment. For example, you can disable color attachment if you need pipeline for shadow mapping
pipeline->enableAlphaChannel([state: bool]); // Enables or disables alpha blending
pipeline->setPolygonMode([mode: VKFS::PolygonMode]); // Changes polygon mode. VKFS::FILL by defaultThis object allows you to create a buffer of vertices and indices using your vertex structure
Example:
auto vb = new VKFS::VertexBuffer<YourVertexStruct>(device, [vertices: std::vector<YourVertexStruct>], [indices: std::vector<uint32_t>]);You can also use this with Push Constants:
auto vb = new VKFS::VertexBuffer<YourVertexStruct, YourPushConstantsStruct>(device, [vertices: std::vector<YourVertexStruct>], [indices: std::vector<uint32_t>]);Next, before you draw, call
vb->pushPushConstants(yourPushConstants);| Platform | Status |
|---|---|
| Windows(MSYS2) | ✔️ |
| MacOS | ✔️ |
| Linux(Debian 11) | ✔️ |
To build a framework, use CMake:
git clone https://github.com/MHDtA-dev/VKFS.git
cd VKFS
mkdir build
cd build
cmake -DVULKAN_INCLUDE_PATH=[Vulkan SDK include path] ..
make