# RapidVulkan **Repository Path**: freechful/RapidVulkan ## Basic Information - **Project Name**: RapidVulkan - **Description**: RapidVulkan - **Primary Language**: Unknown - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-09-14 - **Last Updated**: 2022-09-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RapidVulkan Low level header only C++11 RAII wrapper classes for the Vulkan API. The RAII class design is heavily inspired by std::unique_ptr and is compatible with STL containers. * [The inspiration for the official Vulkan.hpp UniqueHandle](https://github.com/KhronosGroup/Vulkan-Hpp/issues/34). ## Technical overview * RAII classes with full move support, inspired by std::unique_ptr. * Header only C++11. * Compatible with STL containers. * Generated classes contains related vulkan functions in a C++ version. * Exception based error handling. * Easy to mix with normal vulkan code. * Low dependency design, include what you need. * The code is auto generated by [RAIIGen](https://github.com/Unarmed1000/RAIIGen). * Backwards compatible with old Vulkan SDK releases. ## Examples Creation of a temporary staging buffer ```C++ // Create a host-visible staging buffer that contains the raw image data RapidVulkan::Buffer CreateStagingBuffer(const VkDevice device, const VkDeviceSize size) { VkBufferCreateInfo bufferCreateInfo{}; bufferCreateInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; bufferCreateInfo.pNext = nullptr; bufferCreateInfo.size = size; bufferCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; return RapidVulkan::Buffer(device, bufferCreateInfo); } void Main() { // ... { // Scope where we need a staging buffer RapidVulkan::Buffer stagingBuffer = CreateStagingBuffer(device, bufferSize); // Use the staging buffer // ... vkBindBufferMemory(device, stagingBuffer.Get(), stagingMemory, 0); // ... } // The buffer goes out of scope here and is automatically freed // ... } ``` Partial code for creating a Image and its memory ```C++ // ... VkImageCreateInfo imageCreateInfo{}; imageCreateInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; imageCreateInfo.pNext = nullptr; imageCreateInfo.imageType = VK_IMAGE_TYPE_2D; imageCreateInfo.format = format; imageCreateInfo.mipLevels = 1; imageCreateInfo.arrayLayers = textureArray.GetLayers(); imageCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT; imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL; imageCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT; imageCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; imageCreateInfo.extent = texExtent; imageCreateInfo.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; RapidVulkan::Image texImage(device, imageCreateInfo); const auto memReqs = texImage.GetImageMemoryRequirements(); memAllocInfo.allocationSize = memReqs.size; memAllocInfo.memoryTypeIndex = GetMemoryType(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); RapidVulkan::Memory texMemory(device, memAllocInfo); vkBindImageMemory(device, texImage.Get(), texMemory.Get(), 0); // ... ``` Fence ```C++ RapidVulkan::Fence fence; VkFenceCreateInfo fenceCreateInfo{}; fenceCreateInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; fenceCreateInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT; fence.Reset(device.Get(), fenceCreateInfo); // ... // device is a RapidVuilkan::Device device.WaitForFences(1, fence.GetPointer(), VK_TRUE, UINT64_MAX); device.ResetFences(1, fence.GetPointer()); ``` ## Defines Define | Functionality --------------------------------------------|------------------------ RAPIDVULKAN_DISABLE_PARAM_VALIDATION | Disable input parameter validation RAPIDVULKAN_DISABLE_UNROLLED_STRUCT_METHODS | Disable the unrolled structs methods. RAPIDVULKAN_DISABLE_ARRAY_METHODS | Disable support for std::array. if RAPIDVULKAN_DISABLE_UNROLLED_STRUCT_METHODS is set array methods are also disabled. RAPIDVULKAN_DISABLE_VECTOR_METHODS | Disable support for std::vector. if RAPIDVULKAN_DISABLE_UNROLLED_STRUCT_METHODS is set vectory methods are also disabled RAPIDVULKAN_ERRORFORMATTER_EXTERN | Use an extern ErrorFormatter, which allows you to format the exception message to fit your framework. See [ErrorFormatter.hpp](include/RapidVulkan/System/ErrorFormatter.hpp) ## Porting File | Functionality --------------------------------------------------------------------|------------------------ [ErrorFormatter.hpp](include/RapidVulkan/System/ErrorFormatter.hpp) | Controls how the VulkanErrorException message is formatted. [Log.hpp](include/RapidVulkan/System/Log.hpp) | Logging macros, customize this to adapt the logging to your system. [Macro.hpp](include/RapidVulkan/System/Macro.hpp) | Customize a few compiler dependent macros to fit your build system for optimal performance.