diff --git a/vk_engine.cpp b/vk_engine.cpp index 642ceb2..de223bb 100644 --- a/vk_engine.cpp +++ b/vk_engine.cpp @@ -73,6 +73,7 @@ void VulkanEngine::cleanup() void VulkanEngine::draw() { + // ZED: begin command transaction // wait until the gpu has finished rendering the last frame. Timeout of 1 second VK_CHECK(vkWaitForFences(_device, 1, &get_current_frame()._renderFence, true, 1000000000)); get_current_frame()._deletionQueue.flush(); @@ -87,38 +88,60 @@ void VulkanEngine::draw() VkCommandBufferBeginInfo cmdBeginInfo = vkinit::command_buffer_begin_info(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT); + VK_CHECK(vkBeginCommandBuffer(cmd, &cmdBeginInfo)); + + + + + + + // ZED: draw the things _drawExtent.width = _drawImage.imageExtent.width; _drawExtent.height = _drawImage.imageExtent.height; - VK_CHECK(vkBeginCommandBuffer(cmd, &cmdBeginInfo)); - // transition our main draw image into general layout so we can write into it // we will overwrite it all so we dont care about what was the older layout - vkutil::transition_image(cmd, _drawImage.image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL); draw_background(cmd); + // ZED: ? vkutil::transition_image(cmd, _drawImage.image, VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); + + + + // ZED: ? vkutil::transition_image(cmd, _swapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); vkutil::copy_image_to_image(cmd, _drawImage.image, _swapchainImages[swapchainImageIndex], _drawExtent, _swapchainExtent); + + + // ZED: ? vkutil::transition_image(cmd, _swapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); _gui.draw_imgui(_swapchainExtent, cmd, _swapchainImageViews[swapchainImageIndex]); + // ZED: end drawing the things + + + + + + // ZED: finalize image and commit command buffer vkutil::transition_image(cmd, _swapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); VK_CHECK(vkEndCommandBuffer(cmd)); + + + // ZED: submit command to queue //prepare the submission to the queue. //we want to wait on the _presentSemaphore, as that semaphore is signaled when the swapchain is ready //we will signal the _renderSemaphore, to signal that rendering has finished - VkCommandBufferSubmitInfo cmdinfo = vkinit::command_buffer_submit_info(cmd); VkSemaphoreSubmitInfo waitInfo = vkinit::semaphore_submit_info(VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR,get_current_frame()._swapchainSemaphore); @@ -413,15 +436,15 @@ void VulkanEngine::init_pipelines() init_shaders(); } -void VulkanEngine::load_shader(const char *file_name, const char *entry_point, ComputeEffect sky) { - VkShaderModule skyShader; - bool good = vkutil::load_shader_module(file_name, _device, &skyShader); +void VulkanEngine::load_shader(const char *file_name, const char *entry_point, ComputeEffect effect) { + VkShaderModule shader; + bool good = vkutil::load_shader_module(file_name, _device, &shader); assert(good && "failed to load shader"); VkPipelineShaderStageCreateInfo stageinfo{ .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, .stage = VK_SHADER_STAGE_COMPUTE_BIT, - .module = skyShader, + .module = shader, .pName = entry_point, }; @@ -431,16 +454,16 @@ void VulkanEngine::load_shader(const char *file_name, const char *entry_point, C .layout = _gradientPipelineLayout, }; - sky.layout = _gradientPipelineLayout; + effect.layout = _gradientPipelineLayout; - VK_CHECK(vkCreateComputePipelines(_device, VK_NULL_HANDLE, 1, &computePipelineCreateInfo, nullptr, &sky.pipeline)); + VK_CHECK(vkCreateComputePipelines(_device, VK_NULL_HANDLE, 1, &computePipelineCreateInfo, nullptr, &effect.pipeline)); - backgroundEffects.push_back(sky); + backgroundEffects.push_back(effect); - vkDestroyShaderModule(_device, skyShader, nullptr); + vkDestroyShaderModule(_device, shader, nullptr); _mainDeletionQueue.push_function([=,this]() { - vkDestroyPipeline(_device, sky.pipeline, nullptr); + vkDestroyPipeline(_device, effect.pipeline, nullptr); }); }