| 76 | )"; |
| 77 | |
| 78 | int main() |
| 79 | { |
| 80 | try |
| 81 | { |
| 82 | vk::Instance instance = vk::su::createInstance( AppName, EngineName, {}, vk::su::getInstanceExtensions() ); |
| 83 | #if !defined( NDEBUG ) |
| 84 | vk::DebugUtilsMessengerEXT debugUtilsMessenger = instance.createDebugUtilsMessengerEXT( vk::su::makeDebugUtilsMessengerCreateInfoEXT() ); |
| 85 | #endif |
| 86 | |
| 87 | vk::PhysicalDevice physicalDevice = instance.enumeratePhysicalDevices().front(); |
| 88 | |
| 89 | vk::su::SurfaceData surfaceData( instance, AppName, vk::Extent2D( 500, 500 ) ); |
| 90 | |
| 91 | std::pair<uint32_t, uint32_t> graphicsAndPresentQueueFamilyIndex = vk::su::findGraphicsAndPresentQueueFamilyIndex( physicalDevice, surfaceData.surface ); |
| 92 | vk::Device device = vk::su::createDevice( physicalDevice, graphicsAndPresentQueueFamilyIndex.first, vk::su::getDeviceExtensions() ); |
| 93 | |
| 94 | vk::CommandPool commandPool = device.createCommandPool( { {}, graphicsAndPresentQueueFamilyIndex.first } ); |
| 95 | vk::CommandBuffer commandBuffer = |
| 96 | device.allocateCommandBuffers( vk::CommandBufferAllocateInfo( commandPool, vk::CommandBufferLevel::ePrimary, 1 ) ).front(); |
| 97 | |
| 98 | vk::Queue graphicsQueue = device.getQueue( graphicsAndPresentQueueFamilyIndex.first, 0 ); |
| 99 | vk::Queue presentQueue = device.getQueue( graphicsAndPresentQueueFamilyIndex.second, 0 ); |
| 100 | |
| 101 | vk::su::SwapChainData swapChainData( physicalDevice, |
| 102 | device, |
| 103 | surfaceData.surface, |
| 104 | surfaceData.extent, |
| 105 | vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eTransferSrc, |
| 106 | {}, |
| 107 | graphicsAndPresentQueueFamilyIndex.first, |
| 108 | graphicsAndPresentQueueFamilyIndex.second ); |
| 109 | |
| 110 | vk::su::DepthBufferData depthBufferData( physicalDevice, device, vk::Format::eD16Unorm, surfaceData.extent ); |
| 111 | |
| 112 | vk::su::TextureData textureData( physicalDevice, device ); |
| 113 | |
| 114 | commandBuffer.begin( vk::CommandBufferBeginInfo() ); |
| 115 | textureData.setImage( device, commandBuffer, vk::su::MonochromeImageGenerator( { 118, 185, 0 } ) ); |
| 116 | |
| 117 | vk::su::BufferData uniformBufferData( physicalDevice, device, sizeof( glm::mat4x4 ), vk::BufferUsageFlagBits::eUniformBuffer ); |
| 118 | glm::mat4x4 mvpcMatrix = vk::su::createModelViewProjectionClipMatrix( surfaceData.extent ); |
| 119 | vk::su::copyToDevice( device, uniformBufferData.deviceMemory, mvpcMatrix ); |
| 120 | |
| 121 | vk::RenderPass renderPass = vk::su::createRenderPass( |
| 122 | device, vk::su::pickSurfaceFormat( physicalDevice.getSurfaceFormatsKHR( surfaceData.surface ) ).format, depthBufferData.format ); |
| 123 | |
| 124 | glslang::InitializeProcess(); |
| 125 | vk::ShaderModule vertexShaderModule = vk::su::createShaderModule( device, vk::ShaderStageFlagBits::eVertex, vertexShaderText ); |
| 126 | vk::ShaderModule fragmentShaderModule = vk::su::createShaderModule( device, vk::ShaderStageFlagBits::eFragment, fragmentShaderText ); |
| 127 | glslang::FinalizeProcess(); |
| 128 | |
| 129 | std::vector<vk::Framebuffer> framebuffers = |
| 130 | vk::su::createFramebuffers( device, renderPass, swapChainData.imageViews, depthBufferData.imageView, surfaceData.extent ); |
| 131 | |
| 132 | vk::su::BufferData vertexBufferData( physicalDevice, device, sizeof( texturedCubeData ), vk::BufferUsageFlagBits::eVertexBuffer ); |
| 133 | vk::su::copyToDevice( device, vertexBufferData.deviceMemory, texturedCubeData, sizeof( texturedCubeData ) / sizeof( texturedCubeData[0] ) ); |
| 134 | |
| 135 | /* VULKAN_KEY_START */ |
nothing calls this directly
no test coverage detected