From 7d0af312ef78f0fed078ab8bef8c8af9d3e5091a Mon Sep 17 00:00:00 2001 From: antopilo Date: Wed, 29 Jan 2025 21:33:17 -0500 Subject: [PATCH] Cleaned up a lot of old code --- .../SceneEditor/Widgets/ViewportWidget.cpp | 2 +- .../Rendering/Vulkan/SceneRenderPipeline.cpp | 2 +- Nuake/src/Rendering/Vulkan/SceneViewport.cpp | 5 ++- Nuake/src/Rendering/Vulkan/SceneViewport.h | 6 +++ Nuake/src/Rendering/Vulkan/VkResources.h | 1 + .../Vulkan/VulkanImage/VulkanImage.cpp | 6 +++ Nuake/src/Rendering/Vulkan/VulkanRenderer.cpp | 41 ++++++------------- .../Rendering/Vulkan/VulkanSceneRenderer.cpp | 3 ++ Nuake/src/Window.cpp | 20 --------- 9 files changed, 35 insertions(+), 51 deletions(-) diff --git a/Editor/src/Windows/SceneEditor/Widgets/ViewportWidget.cpp b/Editor/src/Windows/SceneEditor/Widgets/ViewportWidget.cpp index 9053cddd..ded145b1 100644 --- a/Editor/src/Windows/SceneEditor/Widgets/ViewportWidget.cpp +++ b/Editor/src/Windows/SceneEditor/Widgets/ViewportWidget.cpp @@ -45,7 +45,7 @@ void ViewportWidget::Draw() ImVec2 regionAvail = ImGui::GetContentRegionAvail(); Vector2 viewportPanelSize = glm::vec2(regionAvail.x, regionAvail.y); - //this->sceneViewport->SetViewportSize(viewportPanelSize); + sceneViewport->QueueResize(viewportPanelSize); // This is important for make UI mouse coord relative to viewport // Nuake::Input::SetViewportDimensions(m_ViewportPos, viewportPanelSize); diff --git a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp index a2696aac..0a26612c 100644 --- a/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp +++ b/Nuake/src/Rendering/Vulkan/SceneRenderPipeline.cpp @@ -299,6 +299,6 @@ Ref SceneRenderPipeline::ResizeImage(Ref image, const gpuResources.AddTexture(newAttachment); // We might need to do this? - // newAttachment->TransitionLayout(ctx.commandBuffer, VK_IMAGE_LAYOUT_GENERAL); + //newAttachment->TransitionLayout(ctx.commandBuffer, VK_IMAGE_LAYOUT_GENERAL); return newAttachment; } diff --git a/Nuake/src/Rendering/Vulkan/SceneViewport.cpp b/Nuake/src/Rendering/Vulkan/SceneViewport.cpp index 0973c602..d0f7a2db 100644 --- a/Nuake/src/Rendering/Vulkan/SceneViewport.cpp +++ b/Nuake/src/Rendering/Vulkan/SceneViewport.cpp @@ -7,6 +7,7 @@ using namespace Nuake; Viewport::Viewport(UUID inViewId, const Vector2& inViewportSize) : id(UUID()), viewportSize(inViewportSize), + queuedResize(inViewportSize), viewId(inViewId) { renderTarget = CreateRef(ImageFormat::RGBA16F, viewportSize); @@ -14,8 +15,10 @@ Viewport::Viewport(UUID inViewId, const Vector2& inViewportSize) : bool Viewport::Resize() { - if (renderTarget->GetSize() != viewportSize) + if (viewportSize != queuedResize) { + viewportSize = queuedResize; + renderTarget = CreateRef(ImageFormat::RGBA16F, viewportSize); return true; } diff --git a/Nuake/src/Rendering/Vulkan/SceneViewport.h b/Nuake/src/Rendering/Vulkan/SceneViewport.h index 76864190..ae0aa957 100644 --- a/Nuake/src/Rendering/Vulkan/SceneViewport.h +++ b/Nuake/src/Rendering/Vulkan/SceneViewport.h @@ -12,6 +12,7 @@ namespace Nuake { private: UUID id; + Vector2 queuedResize; Vector2 viewportSize; UUID viewId; @@ -31,6 +32,11 @@ namespace Nuake viewportSize = size; } + void QueueResize(const Vector2& inSize) + { + queuedResize = inSize; + } + Ref GetRenderTarget() const { return renderTarget; } bool Resize(); }; diff --git a/Nuake/src/Rendering/Vulkan/VkResources.h b/Nuake/src/Rendering/Vulkan/VkResources.h index cab675d6..e901693d 100644 --- a/Nuake/src/Rendering/Vulkan/VkResources.h +++ b/Nuake/src/Rendering/Vulkan/VkResources.h @@ -123,6 +123,7 @@ namespace Nuake VkSampler SamplerLinear; VkSampler SamplerNearest; + public: ModelData ModelTransforms; MaterialData MaterialDataContainer; diff --git a/Nuake/src/Rendering/Vulkan/VulkanImage/VulkanImage.cpp b/Nuake/src/Rendering/Vulkan/VulkanImage/VulkanImage.cpp index 128111f0..c8866722 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanImage/VulkanImage.cpp +++ b/Nuake/src/Rendering/Vulkan/VulkanImage/VulkanImage.cpp @@ -1,10 +1,13 @@ #include "VulkanImage.h" +#include "src/Core/Logger.h" + #include "src/Rendering/Vulkan/VulkanInit.h" #include "src/Rendering/Vulkan/VulkanCheck.h" #include "src/Rendering/Vulkan/VulkanAllocator.h" #include "src/Rendering/Vulkan/VulkanRenderer.h" + #include #include @@ -136,6 +139,8 @@ VulkanImage::VulkanImage(ImageFormat inFormat, Vector2 inSize, ImageUsage usage) } VK_CALL(vkCreateImageView(VkRenderer::Get().GetDevice(), &imageViewCreateInfo, nullptr, &ImageView)); + + Logger::Log("Image created", "vulkan", VERBOSE); } VulkanImage::VulkanImage(void* inData, ImageFormat inFormat, Vector2 inSize) : VulkanImage(inFormat, inSize) @@ -278,6 +283,7 @@ VulkanImage::VulkanImage(void* inData, size_t inSize) : VulkanImage::~VulkanImage() { // TODO: deletion of image + Logger::Log("Deleting VulkanImage", "vulkan", VERBOSE); } void VulkanImage::TransitionLayout(VkCommandBuffer cmd, VkImageLayout layout) diff --git a/Nuake/src/Rendering/Vulkan/VulkanRenderer.cpp b/Nuake/src/Rendering/Vulkan/VulkanRenderer.cpp index aa0cbec3..097c3106 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanRenderer.cpp +++ b/Nuake/src/Rendering/Vulkan/VulkanRenderer.cpp @@ -220,7 +220,6 @@ void VkRenderer::RecreateSwapchain() DestroySwapchain(); CreateSwapchain(Window::Get()->GetSize()); - UpdateDescriptorSets(); } void VkRenderer::CreateSwapchain(const Vector2& size) @@ -331,19 +330,6 @@ void VkRenderer::InitSync() void VkRenderer::InitDescriptors() { - //create a descriptor pool that will hold 10 sets with 1 image each - - //make the descriptor set layout for our compute draw - { - DescriptorLayoutBuilder builder; - builder.AddBinding(0, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE); - DrawImageDescriptorLayout = builder.Build(Device, VK_SHADER_STAGE_COMPUTE_BIT); - } - - DrawImageDescriptors = GlobalDescriptorAllocator.Allocate(Device, DrawImageDescriptorLayout); - - UpdateDescriptorSets(); - for (int i = 0; i < FRAME_OVERLAP; i++) { // create a descriptor pool @@ -365,8 +351,13 @@ void VkRenderer::PrepareSceneData(RenderContext ctx) std::vector> scenes; scenes.reserve(SceneViewports.size()); - for (auto& [scene, _] : SceneViewports) + for (auto& [scene, views] : SceneViewports) { + for (auto& view : views) + { + //Viewports[view]->Resize(); + } + scenes.push_back(scene); } @@ -385,10 +376,10 @@ void VkRenderer::DrawScenes() for (auto& view : views) { Ref viewport = Viewports[view]; - assert(viewport); + assert(viewport && "Viewport is null"); ctx.CameraID = viewport->GetViewID(); - ctx.Size = viewport->GetViewportSize(); + ctx.Size = viewport->GetRenderTarget()->GetSize(); ctx.ViewportImage = viewport->GetRenderTarget(); SceneRenderer->DrawSceneView(ctx); @@ -663,6 +654,11 @@ bool VkRenderer::Draw() return false; } + for (auto& [_id, viewport] : Viewports) + { + //viewport->Resize(); + } + FrameSkipped = false; GetCurrentFrame().FrameDescriptors.ClearPools(Device); @@ -691,16 +687,7 @@ bool VkRenderer::Draw() viewport->GetRenderTarget()->TransitionLayout(cmd, VK_IMAGE_LAYOUT_GENERAL); } - DrawImage->TransitionLayout(cmd, VK_IMAGE_LAYOUT_GENERAL); - //VulkanUtil::TransitionImage(cmd, DrawImage->GetImage(), VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL); - - // Transition rendering iamge to transfert onto swapchain images - //VulkanUtil::TransitionImage(cmd, DrawImage->GetImage(), VK_IMAGE_LAYOUT_GENERAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); - - //SwapchainImages[swapchainImageIndex]->TransitionLayout(cmd, VK_IMAGE_LAYOUT_GENERAL); - //DepthImage->TransitionLayout(cmd, VK_IMAGE_LAYOUT_GENERAL); VulkanUtil::TransitionImage(cmd, SwapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); - //VulkanUtil::TransitionImage(cmd, DepthImage->GetImage(), VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL); //DrawGeometry(cmd); @@ -721,7 +708,6 @@ void VkRenderer::EndDraw() // set swapchain image layout to Attachment Optimal so we can draw it VulkanUtil::TransitionImage(cmd, SwapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); - DrawImage->TransitionLayout(cmd, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); for (auto& [_id, viewport] : Viewports) { viewport->GetRenderTarget()->TransitionLayout(cmd, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); @@ -732,7 +718,6 @@ void VkRenderer::EndDraw() // Transition the swapchain image to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR for presentation VulkanUtil::TransitionImage(cmd, SwapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); - DrawImage->TransitionLayout(cmd, VK_IMAGE_LAYOUT_GENERAL); for (auto& [_id, viewport] : Viewports) { viewport->GetRenderTarget()->TransitionLayout(cmd, VK_IMAGE_LAYOUT_GENERAL); diff --git a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp index 99ed066a..48ba18f2 100644 --- a/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp +++ b/Nuake/src/Rendering/Vulkan/VulkanSceneRenderer.cpp @@ -315,6 +315,9 @@ void VkSceneRenderer::DrawSceneView(RenderContext inContext) sceneRenderPipeline->Render(passCtx); + // in case we just resized + inContext.CommandBuffer.TransitionImageLayout(inContext.ViewportImage, VK_IMAGE_LAYOUT_GENERAL); + inContext.CommandBuffer.TransitionImageLayout(sceneRenderPipeline->GetOutput(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); inContext.CommandBuffer.TransitionImageLayout(inContext.ViewportImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); inContext.CommandBuffer.CopyImageToImage(sceneRenderPipeline->GetOutput(), inContext.ViewportImage); diff --git a/Nuake/src/Window.cpp b/Nuake/src/Window.cpp index 78261cde..e4f10263 100644 --- a/Nuake/src/Window.cpp +++ b/Nuake/src/Window.cpp @@ -202,26 +202,6 @@ void Window::Draw() size.y = std::max(size.y, 1.0f); cam->AspectRatio = size.x / size.y; - - if (Engine::IsPlayMode()) - { - ZoneScopedN("PIE Draw"); - this->scene->Draw(*this->framebuffer.get()); - } - else - { - ZoneScopedN("Non-playmode Draw"); - float resolutionScale = glm::clamp(Engine::GetProject()->Settings.ResolutionScale, 0.5f, 2.0f); - this->scene->m_EditorCamera->OnWindowResize(size.x * resolutionScale, size.y * resolutionScale); - - auto& vkRenderer = VkRenderer::Get(); - //vkRenderer.PrepareSceneData(); - VkRenderer::Get().BeginScene(scene->m_EditorCamera->ID); - this->scene->Draw(*this->framebuffer.get(), this->scene->m_EditorCamera->GetPerspective(), this->scene->m_EditorCamera->GetTransform()); - } - - //glEnable(GL_DEPTH_TEST); - Renderer::EndDraw(); } void Window::EndDraw()