Renderer/RenderTarget: Add size method and signal
This commit is contained in:
parent
9854ebe950
commit
c6611fcb9f
|
|
@ -37,6 +37,7 @@ namespace Nz
|
|||
const OpenGLFramebuffer& GetFramebuffer(std::size_t i) const override;
|
||||
std::size_t GetFramebufferCount() const override;
|
||||
const OpenGLRenderPass& GetRenderPass() const override;
|
||||
const Vector2ui& GetSize() const override;
|
||||
|
||||
void Present();
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@
|
|||
#define NAZARA_RENDERTARGET_HPP
|
||||
|
||||
#include <Nazara/Prerequisites.hpp>
|
||||
#include <Nazara/Core/Signal.hpp>
|
||||
#include <Nazara/Math/Vector2.hpp>
|
||||
#include <Nazara/Renderer/Config.hpp>
|
||||
|
||||
namespace Nz
|
||||
|
|
@ -24,6 +26,9 @@ namespace Nz
|
|||
virtual const Framebuffer& GetFramebuffer(std::size_t i) const = 0;
|
||||
virtual std::size_t GetFramebufferCount() const = 0;
|
||||
virtual const RenderPass& GetRenderPass() const = 0;
|
||||
virtual const Vector2ui& GetSize() const = 0;
|
||||
|
||||
NazaraSignal(OnRenderTargetSizeChange, const RenderTarget* /*renderTarget*/, const Vector2ui& /*newSize*/);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,40 +0,0 @@
|
|||
// Copyright (C) 201 Jérôme Leclercq
|
||||
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef NAZARA_VULKANRENDERER_RENDERTARGET_HPP
|
||||
#define NAZARA_VULKANRENDERER_RENDERTARGET_HPP
|
||||
|
||||
#include <Nazara/Prerequisites.hpp>
|
||||
#include <Nazara/Core/Signal.hpp>
|
||||
#include <Nazara/VulkanRenderer/Config.hpp>
|
||||
#include <Nazara/VulkanRenderer/Wrapper/Framebuffer.hpp>
|
||||
#include <Nazara/VulkanRenderer/Wrapper/RenderPass.hpp>
|
||||
#include <Nazara/VulkanRenderer/Wrapper/Semaphore.hpp>
|
||||
#include <unordered_map>
|
||||
#include <vulkan/vulkan_core.h>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
class NAZARA_VULKANRENDERER_API VkRenderTarget
|
||||
{
|
||||
public:
|
||||
VkRenderTarget() = default;
|
||||
VkRenderTarget(const VkRenderTarget&) = delete;
|
||||
VkRenderTarget(VkRenderTarget&&) = delete; ///TOOD?
|
||||
virtual ~VkRenderTarget();
|
||||
|
||||
VkRenderTarget& operator=(const VkRenderTarget&) = delete;
|
||||
VkRenderTarget& operator=(VkRenderTarget&&) = delete; ///TOOD?
|
||||
|
||||
// Signals:
|
||||
NazaraSignal(OnRenderTargetRelease, const VkRenderTarget* /*renderTarget*/);
|
||||
NazaraSignal(OnRenderTargetSizeChange, const VkRenderTarget* /*renderTarget*/);
|
||||
};
|
||||
}
|
||||
|
||||
#include <Nazara/VulkanRenderer/VkRenderTarget.inl>
|
||||
|
||||
#endif // NAZARA_VULKANRENDERER_RENDERTARGET_HPP
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
// Copyright (C) 2020 Jérôme Leclercq
|
||||
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/VulkanRenderer/VkRenderTarget.hpp>
|
||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
}
|
||||
|
||||
#include <Nazara/VulkanRenderer/DebugOff.hpp>
|
||||
|
|
@ -18,12 +18,12 @@
|
|||
|
||||
namespace Nz
|
||||
{
|
||||
class VkRenderWindow;
|
||||
class VulkanRenderWindow;
|
||||
|
||||
class NAZARA_VULKANRENDERER_API VulkanRenderImage : public RenderImage
|
||||
{
|
||||
public:
|
||||
VulkanRenderImage(VkRenderWindow& owner);
|
||||
VulkanRenderImage(VulkanRenderWindow& owner);
|
||||
VulkanRenderImage(const VulkanRenderImage&) = delete;
|
||||
VulkanRenderImage(VulkanRenderImage&&) noexcept = default;
|
||||
~VulkanRenderImage();
|
||||
|
|
@ -50,7 +50,7 @@ namespace Nz
|
|||
std::size_t m_currentCommandBuffer;
|
||||
std::vector<Vk::AutoCommandBuffer> m_inFlightCommandBuffers;
|
||||
std::vector<VkCommandBuffer> m_graphicalCommandsBuffers;
|
||||
VkRenderWindow& m_owner;
|
||||
VulkanRenderWindow& m_owner;
|
||||
Vk::CommandPool m_commandPool;
|
||||
Vk::Fence m_inFlightFence;
|
||||
Vk::Semaphore m_imageAvailableSemaphore;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@
|
|||
#include <Nazara/VulkanRenderer/VulkanWindowFramebuffer.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanRenderImage.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanRenderPass.hpp>
|
||||
#include <Nazara/VulkanRenderer/VkRenderTarget.hpp>
|
||||
#include <Nazara/VulkanRenderer/Wrapper/CommandBuffer.hpp>
|
||||
#include <Nazara/VulkanRenderer/Wrapper/CommandPool.hpp>
|
||||
#include <Nazara/VulkanRenderer/Wrapper/Device.hpp>
|
||||
|
|
@ -34,13 +33,13 @@
|
|||
|
||||
namespace Nz
|
||||
{
|
||||
class NAZARA_VULKANRENDERER_API VkRenderWindow : public VkRenderTarget, public RenderWindowImpl
|
||||
class NAZARA_VULKANRENDERER_API VulkanRenderWindow : public RenderWindowImpl
|
||||
{
|
||||
public:
|
||||
VkRenderWindow(RenderWindow& owner);
|
||||
VkRenderWindow(const VkRenderWindow&) = delete;
|
||||
VkRenderWindow(VkRenderWindow&&) = delete; ///TODO
|
||||
~VkRenderWindow();
|
||||
VulkanRenderWindow(RenderWindow& owner);
|
||||
VulkanRenderWindow(const VulkanRenderWindow&) = delete;
|
||||
VulkanRenderWindow(VulkanRenderWindow&&) = delete; ///TODO
|
||||
~VulkanRenderWindow();
|
||||
|
||||
RenderFrame Acquire() override;
|
||||
|
||||
|
|
@ -53,13 +52,14 @@ namespace Nz
|
|||
inline VulkanDevice& GetDevice();
|
||||
inline const VulkanDevice& GetDevice() const;
|
||||
inline Vk::QueueHandle& GetGraphicsQueue();
|
||||
inline const VulkanRenderPass& GetRenderPass() const override;
|
||||
const VulkanRenderPass& GetRenderPass() const override;
|
||||
const Vector2ui& GetSize() const override;
|
||||
inline const Vk::Swapchain& GetSwapchain() const;
|
||||
|
||||
void Present(UInt32 imageIndex, VkSemaphore waitSemaphore = VK_NULL_HANDLE);
|
||||
|
||||
VkRenderWindow& operator=(const VkRenderWindow&) = delete;
|
||||
VkRenderWindow& operator=(VkRenderWindow&&) = delete; ///TODO
|
||||
VulkanRenderWindow& operator=(const VulkanRenderWindow&) = delete;
|
||||
VulkanRenderWindow& operator=(VulkanRenderWindow&&) = delete; ///TODO
|
||||
|
||||
private:
|
||||
bool CreateSwapchain(Vk::Surface& surface, const Vector2ui& size);
|
||||
|
|
@ -90,6 +90,6 @@ namespace Nz
|
|||
};
|
||||
}
|
||||
|
||||
#include <Nazara/VulkanRenderer/VkRenderWindow.inl>
|
||||
#include <Nazara/VulkanRenderer/VulkanRenderWindow.inl>
|
||||
|
||||
#endif // NAZARA_VULKANRENDERER_RENDERWINDOW_HPP
|
||||
|
|
@ -2,32 +2,27 @@
|
|||
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/VulkanRenderer/VkRenderWindow.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanRenderWindow.hpp>
|
||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
inline VulkanDevice& VkRenderWindow::GetDevice()
|
||||
inline VulkanDevice& VulkanRenderWindow::GetDevice()
|
||||
{
|
||||
return *m_device;
|
||||
}
|
||||
|
||||
inline const VulkanDevice& VkRenderWindow::GetDevice() const
|
||||
inline const VulkanDevice& VulkanRenderWindow::GetDevice() const
|
||||
{
|
||||
return *m_device;
|
||||
}
|
||||
|
||||
inline Vk::QueueHandle& VkRenderWindow::GetGraphicsQueue()
|
||||
inline Vk::QueueHandle& VulkanRenderWindow::GetGraphicsQueue()
|
||||
{
|
||||
return m_graphicsQueue;
|
||||
}
|
||||
|
||||
inline const VulkanRenderPass& VkRenderWindow::GetRenderPass() const
|
||||
{
|
||||
return *m_renderPass;
|
||||
}
|
||||
|
||||
inline const Vk::Swapchain& VkRenderWindow::GetSwapchain() const
|
||||
inline const Vk::Swapchain& VulkanRenderWindow::GetSwapchain() const
|
||||
{
|
||||
return m_swapchain;
|
||||
}
|
||||
|
|
@ -29,6 +29,8 @@ namespace Nz
|
|||
if (m_size != size)
|
||||
{
|
||||
invalidateFramebuffer = true;
|
||||
|
||||
OnRenderTargetSizeChange(this, size);
|
||||
m_size = size;
|
||||
}
|
||||
|
||||
|
|
@ -115,6 +117,11 @@ namespace Nz
|
|||
return *m_renderPass;
|
||||
}
|
||||
|
||||
const Vector2ui& OpenGLRenderWindow::GetSize() const
|
||||
{
|
||||
return m_size;
|
||||
}
|
||||
|
||||
void OpenGLRenderWindow::Present()
|
||||
{
|
||||
m_context->SwapBuffers();
|
||||
|
|
|
|||
|
|
@ -1,14 +0,0 @@
|
|||
// Copyright (C) 2020 Jérôme Leclercq
|
||||
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/VulkanRenderer/VkRenderTarget.hpp>
|
||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
VkRenderTarget::~VkRenderTarget()
|
||||
{
|
||||
OnRenderTargetRelease(this);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/VulkanRenderer/VulkanRenderImage.hpp>
|
||||
#include <Nazara/VulkanRenderer/VkRenderWindow.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanRenderWindow.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanCommandBuffer.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanCommandBufferBuilder.hpp>
|
||||
#include <stdexcept>
|
||||
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
namespace Nz
|
||||
{
|
||||
VulkanRenderImage::VulkanRenderImage(VkRenderWindow& owner) :
|
||||
VulkanRenderImage::VulkanRenderImage(VulkanRenderWindow& owner) :
|
||||
m_owner(owner),
|
||||
m_uploadPool(m_owner.GetDevice(), 2 * 1024 * 1024)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// This file is part of the "Nazara Engine - Renderer module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/VulkanRenderer/VkRenderWindow.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanRenderWindow.hpp>
|
||||
#include <Nazara/Core/Error.hpp>
|
||||
#include <Nazara/Core/ErrorFlags.hpp>
|
||||
#include <Nazara/Core/StackArray.hpp>
|
||||
|
|
@ -19,14 +19,14 @@
|
|||
|
||||
namespace Nz
|
||||
{
|
||||
VkRenderWindow::VkRenderWindow(RenderWindow& owner) :
|
||||
VulkanRenderWindow::VulkanRenderWindow(RenderWindow& owner) :
|
||||
m_currentFrame(0),
|
||||
m_owner(owner),
|
||||
m_shouldRecreateSwapchain(false)
|
||||
{
|
||||
}
|
||||
|
||||
VkRenderWindow::~VkRenderWindow()
|
||||
VulkanRenderWindow::~VulkanRenderWindow()
|
||||
{
|
||||
if (m_device)
|
||||
m_device->WaitForIdle();
|
||||
|
|
@ -37,7 +37,7 @@ namespace Nz
|
|||
m_swapchain.Destroy();
|
||||
}
|
||||
|
||||
RenderFrame VkRenderWindow::Acquire()
|
||||
RenderFrame VulkanRenderWindow::Acquire()
|
||||
{
|
||||
bool invalidateFramebuffer = false;
|
||||
|
||||
|
|
@ -50,6 +50,8 @@ namespace Nz
|
|||
{
|
||||
Vk::Surface& vulkanSurface = static_cast<VulkanSurface*>(m_owner.GetSurface())->GetSurface();
|
||||
|
||||
OnRenderTargetSizeChange(this, size);
|
||||
|
||||
if (!CreateSwapchain(vulkanSurface, size))
|
||||
throw std::runtime_error("failed to recreate swapchain");
|
||||
|
||||
|
|
@ -103,7 +105,7 @@ namespace Nz
|
|||
return RenderFrame(¤tFrame, invalidateFramebuffer, size, imageIndex);
|
||||
}
|
||||
|
||||
bool VkRenderWindow::Create(RendererImpl* /*renderer*/, RenderSurface* surface, const RenderWindowParameters& parameters)
|
||||
bool VulkanRenderWindow::Create(RendererImpl* /*renderer*/, RenderSurface* surface, const RenderWindowParameters& parameters)
|
||||
{
|
||||
std::shared_ptr<VulkanDevice> device = std::static_pointer_cast<VulkanDevice>(m_owner.GetRenderDevice());
|
||||
|
||||
|
|
@ -280,7 +282,7 @@ namespace Nz
|
|||
return true;
|
||||
}
|
||||
|
||||
std::shared_ptr<CommandPool> VkRenderWindow::CreateCommandPool(QueueType queueType)
|
||||
std::shared_ptr<CommandPool> VulkanRenderWindow::CreateCommandPool(QueueType queueType)
|
||||
{
|
||||
UInt32 queueFamilyIndex = [&] {
|
||||
switch (queueType)
|
||||
|
|
@ -301,18 +303,28 @@ namespace Nz
|
|||
return std::make_shared<VulkanCommandPool>(*m_device, queueFamilyIndex);
|
||||
}
|
||||
|
||||
const VulkanWindowFramebuffer& VkRenderWindow::GetFramebuffer(std::size_t i) const
|
||||
const VulkanWindowFramebuffer& VulkanRenderWindow::GetFramebuffer(std::size_t i) const
|
||||
{
|
||||
assert(i < m_framebuffers.size());
|
||||
return m_framebuffers[i];
|
||||
}
|
||||
|
||||
std::size_t VkRenderWindow::GetFramebufferCount() const
|
||||
std::size_t VulkanRenderWindow::GetFramebufferCount() const
|
||||
{
|
||||
return std::size_t();
|
||||
return m_framebuffers.size();
|
||||
}
|
||||
|
||||
void VkRenderWindow::Present(UInt32 imageIndex, VkSemaphore waitSemaphore)
|
||||
const VulkanRenderPass& VulkanRenderWindow::GetRenderPass() const
|
||||
{
|
||||
return *m_renderPass;
|
||||
}
|
||||
|
||||
const Vector2ui& VulkanRenderWindow::GetSize() const
|
||||
{
|
||||
return m_swapchainSize;
|
||||
}
|
||||
|
||||
void VulkanRenderWindow::Present(UInt32 imageIndex, VkSemaphore waitSemaphore)
|
||||
{
|
||||
NazaraAssert(imageIndex < m_inflightFences.size(), "Invalid image index");
|
||||
|
||||
|
|
@ -344,7 +356,7 @@ namespace Nz
|
|||
}
|
||||
}
|
||||
|
||||
bool VkRenderWindow::CreateSwapchain(Vk::Surface& surface, const Vector2ui& size)
|
||||
bool VulkanRenderWindow::CreateSwapchain(Vk::Surface& surface, const Vector2ui& size)
|
||||
{
|
||||
assert(m_device);
|
||||
if (!SetupSwapchain(m_device->GetPhysicalDeviceInfo(), surface, size))
|
||||
|
|
@ -368,7 +380,7 @@ namespace Nz
|
|||
return true;
|
||||
}
|
||||
|
||||
bool VkRenderWindow::SetupDepthBuffer(const Vector2ui& size)
|
||||
bool VulkanRenderWindow::SetupDepthBuffer(const Vector2ui& size)
|
||||
{
|
||||
VkImageCreateInfo imageCreateInfo = {
|
||||
VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // VkStructureType sType;
|
||||
|
|
@ -446,7 +458,7 @@ namespace Nz
|
|||
return true;
|
||||
}
|
||||
|
||||
bool VkRenderWindow::SetupFrameBuffers(const Vector2ui& size)
|
||||
bool VulkanRenderWindow::SetupFrameBuffers(const Vector2ui& size)
|
||||
{
|
||||
UInt32 imageCount = m_swapchain.GetImageCount();
|
||||
|
||||
|
|
@ -482,7 +494,7 @@ namespace Nz
|
|||
return true;
|
||||
}
|
||||
|
||||
bool VkRenderWindow::SetupRenderPass()
|
||||
bool VulkanRenderWindow::SetupRenderPass()
|
||||
{
|
||||
std::optional<PixelFormat> colorFormat = FromVulkan(m_surfaceFormat.format);
|
||||
if (!colorFormat)
|
||||
|
|
@ -511,7 +523,7 @@ namespace Nz
|
|||
return true;
|
||||
}
|
||||
|
||||
bool VkRenderWindow::SetupSwapchain(const Vk::PhysicalDevice& deviceInfo, Vk::Surface& surface, const Vector2ui& size)
|
||||
bool VulkanRenderWindow::SetupSwapchain(const Vk::PhysicalDevice& deviceInfo, Vk::Surface& surface, const Vector2ui& size)
|
||||
{
|
||||
VkSurfaceCapabilitiesKHR surfaceCapabilities;
|
||||
if (!surface.GetCapabilities(deviceInfo.physDevice, &surfaceCapabilities))
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
#include <Nazara/Renderer/RenderDevice.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanBuffer.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanSurface.hpp>
|
||||
#include <Nazara/VulkanRenderer/VkRenderWindow.hpp>
|
||||
#include <Nazara/VulkanRenderer/VulkanRenderWindow.hpp>
|
||||
#include <Nazara/VulkanRenderer/Wrapper/Loader.hpp>
|
||||
#include <cassert>
|
||||
#include <sstream>
|
||||
|
|
@ -27,7 +27,7 @@ namespace Nz
|
|||
|
||||
std::unique_ptr<RenderWindowImpl> VulkanRenderer::CreateRenderWindowImpl(RenderWindow& owner)
|
||||
{
|
||||
return std::make_unique<VkRenderWindow>(owner);
|
||||
return std::make_unique<VulkanRenderWindow>(owner);
|
||||
}
|
||||
|
||||
std::shared_ptr<RenderDevice> VulkanRenderer::InstanciateRenderDevice(std::size_t deviceIndex, const RenderDeviceFeatures& enabledFeatures)
|
||||
|
|
|
|||
Loading…
Reference in New Issue