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