| 17 | static char const * EngineName = "Vulkan.hpp"; |
| 18 | |
| 19 | int main() |
| 20 | { |
| 21 | try |
| 22 | { |
| 23 | vk::raii::Context context; |
| 24 | vk::raii::Instance instance = vk::raii::su::makeInstance( context, AppName, EngineName, {}, vk::su::getInstanceExtensions() ); |
| 25 | #if !defined( NDEBUG ) |
| 26 | vk::raii::DebugUtilsMessengerEXT debugUtilsMessenger( instance, vk::su::makeDebugUtilsMessengerCreateInfoEXT() ); |
| 27 | #endif |
| 28 | vk::raii::PhysicalDevice physicalDevice = vk::raii::PhysicalDevices( instance ).front(); |
| 29 | |
| 30 | vk::raii::su::SurfaceData surfaceData( instance, AppName, vk::Extent2D( 500, 500 ) ); |
| 31 | |
| 32 | std::pair<uint32_t, uint32_t> graphicsAndPresentQueueFamilyIndex = |
| 33 | vk::raii::su::findGraphicsAndPresentQueueFamilyIndex( physicalDevice, surfaceData.surface ); |
| 34 | vk::raii::Device device = vk::raii::su::makeDevice( physicalDevice, graphicsAndPresentQueueFamilyIndex.first, vk::su::getDeviceExtensions() ); |
| 35 | |
| 36 | vk::raii::CommandPool commandPool = vk::raii::CommandPool( device, { {}, graphicsAndPresentQueueFamilyIndex.first } ); |
| 37 | vk::raii::CommandBuffer commandBuffer = vk::raii::su::makeCommandBuffer( device, commandPool ); |
| 38 | |
| 39 | vk::raii::Queue graphicsQueue( device, graphicsAndPresentQueueFamilyIndex.first, 0 ); |
| 40 | vk::raii::Queue presentQueue( device, graphicsAndPresentQueueFamilyIndex.second, 0 ); |
| 41 | |
| 42 | vk::raii::su::SwapChainData swapChainData( physicalDevice, |
| 43 | device, |
| 44 | surfaceData.surface, |
| 45 | surfaceData.extent, |
| 46 | vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eTransferSrc, |
| 47 | {}, |
| 48 | graphicsAndPresentQueueFamilyIndex.first, |
| 49 | graphicsAndPresentQueueFamilyIndex.second ); |
| 50 | |
| 51 | vk::raii::su::DepthBufferData depthBufferData( physicalDevice, device, vk::Format::eD16Unorm, surfaceData.extent ); |
| 52 | |
| 53 | vk::raii::su::TextureData textureData( physicalDevice, device ); |
| 54 | |
| 55 | commandBuffer.begin( vk::CommandBufferBeginInfo() ); |
| 56 | textureData.setImage( commandBuffer, vk::su::CheckerboardImageGenerator() ); |
| 57 | |
| 58 | vk::raii::su::BufferData uniformBufferData( physicalDevice, device, sizeof( glm::mat4x4 ), vk::BufferUsageFlagBits::eUniformBuffer ); |
| 59 | glm::mat4x4 mvpcMatrix = vk::su::createModelViewProjectionClipMatrix( surfaceData.extent ); |
| 60 | vk::raii::su::copyToDevice( uniformBufferData.deviceMemory, mvpcMatrix ); |
| 61 | |
| 62 | vk::raii::DescriptorSetLayout descriptorSetLayout = |
| 63 | vk::raii::su::makeDescriptorSetLayout( device, |
| 64 | { { vk::DescriptorType::eUniformBuffer, 1, vk::ShaderStageFlagBits::eVertex }, |
| 65 | { vk::DescriptorType::eCombinedImageSampler, 1, vk::ShaderStageFlagBits::eFragment } } ); |
| 66 | vk::raii::PipelineLayout pipelineLayout( device, { {}, *descriptorSetLayout } ); |
| 67 | |
| 68 | vk::Format colorFormat = vk::su::pickSurfaceFormat( physicalDevice.getSurfaceFormatsKHR( surfaceData.surface ) ).format; |
| 69 | vk::raii::RenderPass renderPass = vk::raii::su::makeRenderPass( device, colorFormat, depthBufferData.format ); |
| 70 | |
| 71 | glslang::InitializeProcess(); |
| 72 | vk::raii::ShaderModule vertexShaderModule = vk::raii::su::makeShaderModule( device, vk::ShaderStageFlagBits::eVertex, vertexShaderText_PT_T ); |
| 73 | vk::raii::ShaderModule fragmentShaderModule = vk::raii::su::makeShaderModule( device, vk::ShaderStageFlagBits::eFragment, fragmentShaderText_T_C ); |
| 74 | glslang::FinalizeProcess(); |
| 75 | |
| 76 | std::vector<vk::raii::Framebuffer> framebuffers = |
nothing calls this directly
no test coverage detected