diff --git a/Editor/Source/Editor/Windows/SceneEditor/Widgets/ViewportWidget.cpp b/Editor/Source/Editor/Windows/SceneEditor/Widgets/ViewportWidget.cpp index 2e31772e..5dd8a206 100644 --- a/Editor/Source/Editor/Windows/SceneEditor/Widgets/ViewportWidget.cpp +++ b/Editor/Source/Editor/Windows/SceneEditor/Widgets/ViewportWidget.cpp @@ -77,14 +77,18 @@ void ViewportWidget::Draw() // This is important for make UI mouse coord relative to viewport // Nuake::Input::SetViewportDimensions(m_ViewportPos, viewportPanelSize); - VkDescriptorSet textureDesc = sceneViewport->GetRenderTarget()->GetImGuiDescriptorSet(); - ImVec2 imagePos = ImGui::GetWindowPos() + ImGui::GetCursorPos(); ImVec2 viewportMin = ImGui::GetCursorScreenPos(); // Input::SetEditorViewportSize(m_ViewportPos, viewportPanelSize); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); //m_ViewportPos = { imagePos.x, imagePos.y }; - ImGui::Image(textureDesc, regionAvail, { 0, 1 }, { 1, 0 }); + + VkDescriptorSet textureDesc = sceneViewport->GetRenderTarget()->GetImGuiDescriptorSet(); + if (!needsResize) + { + ImGui::Image(textureDesc, regionAvail, { 0, 1 }, { 1, 0 }); + } + ImGui::PopStyleVar(); float title_bar_height = ImGui::GetFontSize() + ImGui::GetStyle().FramePadding.y * 2; @@ -470,7 +474,7 @@ void ViewportWidget::OnDebugDraw(DebugCmd& debugCmd) { auto [transform, light] = scene->m_Registry.get(e); - auto selection = editorContext.GetSelection(); + const auto& selection = editorContext.GetSelection(); bool isSelected = selection.Type == EditorSelectionType::Entity && selection.Entity.GetHandle() == (int)e; std::string texturePath = "Resources/Gizmos/"; diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/SceneViewport.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/SceneViewport.cpp index f7e87d1b..de57cb0d 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/SceneViewport.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/SceneViewport.cpp @@ -29,8 +29,19 @@ bool Viewport::Resize() { viewportSize = queuedResize; - renderTarget = CreateRef(ImageFormat::RGBA16F, viewportSize); - renderTarget->GetImGuiDescriptorSet(); + auto newRenderTarget = CreateRef(ImageFormat::RGBA16F, viewportSize); + VkRenderer::Get().ImmediateSubmit([&](VkCommandBuffer cmd) + { + Cmd command(cmd); + command.TransitionImageLayout(renderTarget, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); + command.TransitionImageLayout(newRenderTarget, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); + command.CopyImageToImage(renderTarget, newRenderTarget); + command.TransitionImageLayout(renderTarget, VK_IMAGE_LAYOUT_GENERAL); + command.TransitionImageLayout(newRenderTarget, VK_IMAGE_LAYOUT_GENERAL); + }); + + renderTarget = newRenderTarget; + return true; } diff --git a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp index 0147771e..f7ab3741 100644 --- a/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp +++ b/Nuake/Source/Nuake/Rendering/Vulkan/VulkanRenderer.cpp @@ -722,6 +722,7 @@ bool VkRenderer::Draw() { //viewport->Resize(); } + ResizeViewports(); FrameSkipped = false; @@ -768,6 +769,7 @@ bool VkRenderer::Draw() void VkRenderer::EndDraw() { + if (FrameSkipped) { return; @@ -822,10 +824,10 @@ void VkRenderer::EndDraw() presentInfo.pImageIndices = &swapchainImageIndex; - ResizeViewports(); VK_CALL(vkQueuePresentKHR(GPUQueue, &presentInfo)); + auto& io = ImGui::GetIO(); //io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable; //Update and Render additional Platform Windows