Renderer/Framebuffer: Add GetType (and rework backend internals)
This commit is contained in:
parent
c188d0616a
commit
d88c4ecb5b
|
|
@ -16,13 +16,7 @@ namespace Nz
|
||||||
class NAZARA_OPENGLRENDERER_API OpenGLFramebuffer : public Framebuffer
|
class NAZARA_OPENGLRENDERER_API OpenGLFramebuffer : public Framebuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum class Type
|
using Framebuffer::Framebuffer;
|
||||||
{
|
|
||||||
FBO,
|
|
||||||
Window
|
|
||||||
};
|
|
||||||
|
|
||||||
inline OpenGLFramebuffer(Type type);
|
|
||||||
OpenGLFramebuffer() = default;
|
OpenGLFramebuffer() = default;
|
||||||
OpenGLFramebuffer(const OpenGLFramebuffer&) = delete;
|
OpenGLFramebuffer(const OpenGLFramebuffer&) = delete;
|
||||||
OpenGLFramebuffer(OpenGLFramebuffer&&) noexcept = default;
|
OpenGLFramebuffer(OpenGLFramebuffer&&) noexcept = default;
|
||||||
|
|
@ -32,13 +26,8 @@ namespace Nz
|
||||||
|
|
||||||
virtual std::size_t GetColorBufferCount() const = 0;
|
virtual std::size_t GetColorBufferCount() const = 0;
|
||||||
|
|
||||||
inline Type GetType() const;
|
|
||||||
|
|
||||||
OpenGLFramebuffer& operator=(const OpenGLFramebuffer&) = delete;
|
OpenGLFramebuffer& operator=(const OpenGLFramebuffer&) = delete;
|
||||||
OpenGLFramebuffer& operator=(OpenGLFramebuffer&&) noexcept = default;
|
OpenGLFramebuffer& operator=(OpenGLFramebuffer&&) noexcept = default;
|
||||||
|
|
||||||
private:
|
|
||||||
Type m_type;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,6 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
inline OpenGLFramebuffer::OpenGLFramebuffer(Type type) :
|
|
||||||
m_type(type)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline auto OpenGLFramebuffer::GetType() const -> Type
|
|
||||||
{
|
|
||||||
return m_type;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <Nazara/OpenGLRenderer/DebugOff.hpp>
|
#include <Nazara/OpenGLRenderer/DebugOff.hpp>
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
inline OpenGLWindowFramebuffer::OpenGLWindowFramebuffer(OpenGLRenderWindow& renderWindow) :
|
inline OpenGLWindowFramebuffer::OpenGLWindowFramebuffer(OpenGLRenderWindow& renderWindow) :
|
||||||
OpenGLFramebuffer(OpenGLFramebuffer::Type::Window),
|
OpenGLFramebuffer(FramebufferType::Window),
|
||||||
m_renderWindow(renderWindow)
|
m_renderWindow(renderWindow)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,12 @@ namespace Nz
|
||||||
Store
|
Store
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class FramebufferType
|
||||||
|
{
|
||||||
|
Texture,
|
||||||
|
Window
|
||||||
|
};
|
||||||
|
|
||||||
enum class MemoryAccess
|
enum class MemoryAccess
|
||||||
{
|
{
|
||||||
ColorRead,
|
ColorRead,
|
||||||
|
|
|
||||||
|
|
@ -9,19 +9,25 @@
|
||||||
|
|
||||||
#include <Nazara/Prerequisites.hpp>
|
#include <Nazara/Prerequisites.hpp>
|
||||||
#include <Nazara/Renderer/Config.hpp>
|
#include <Nazara/Renderer/Config.hpp>
|
||||||
|
#include <Nazara/Renderer/Enums.hpp>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
class NAZARA_RENDERER_API Framebuffer
|
class NAZARA_RENDERER_API Framebuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Framebuffer() = default;
|
inline Framebuffer(FramebufferType type);
|
||||||
Framebuffer(const Framebuffer&) = delete;
|
Framebuffer(const Framebuffer&) = delete;
|
||||||
Framebuffer(Framebuffer&&) noexcept = default;
|
Framebuffer(Framebuffer&&) noexcept = default;
|
||||||
virtual ~Framebuffer();
|
virtual ~Framebuffer();
|
||||||
|
|
||||||
|
inline FramebufferType GetType() const;
|
||||||
|
|
||||||
Framebuffer& operator=(const Framebuffer&) = delete;
|
Framebuffer& operator=(const Framebuffer&) = delete;
|
||||||
Framebuffer& operator=(Framebuffer&&) noexcept = default;
|
Framebuffer& operator=(Framebuffer&&) noexcept = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
FramebufferType m_type;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,15 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
|
inline Framebuffer::Framebuffer(FramebufferType type) :
|
||||||
|
m_type(type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
inline FramebufferType Framebuffer::GetType() const
|
||||||
|
{
|
||||||
|
return m_type;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <Nazara/Renderer/DebugOff.hpp>
|
#include <Nazara/Renderer/DebugOff.hpp>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
#include <Nazara/Renderer/RenderWindowImpl.hpp>
|
#include <Nazara/Renderer/RenderWindowImpl.hpp>
|
||||||
#include <Nazara/VulkanRenderer/Config.hpp>
|
#include <Nazara/VulkanRenderer/Config.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanDevice.hpp>
|
#include <Nazara/VulkanRenderer/VulkanDevice.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanMultipleFramebuffer.hpp>
|
#include <Nazara/VulkanRenderer/VulkanWindowFramebuffer.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanRenderImage.hpp>
|
#include <Nazara/VulkanRenderer/VulkanRenderImage.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanRenderPass.hpp>
|
#include <Nazara/VulkanRenderer/VulkanRenderPass.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VkRenderTarget.hpp>
|
#include <Nazara/VulkanRenderer/VkRenderTarget.hpp>
|
||||||
|
|
@ -48,7 +48,7 @@ namespace Nz
|
||||||
|
|
||||||
std::shared_ptr<CommandPool> CreateCommandPool(QueueType queueType) override;
|
std::shared_ptr<CommandPool> CreateCommandPool(QueueType queueType) override;
|
||||||
|
|
||||||
inline const VulkanMultipleFramebuffer& GetFramebuffer() const override;
|
inline const VulkanWindowFramebuffer& GetFramebuffer() const override;
|
||||||
inline VulkanDevice& GetDevice();
|
inline VulkanDevice& GetDevice();
|
||||||
inline const VulkanDevice& GetDevice() const;
|
inline const VulkanDevice& GetDevice() const;
|
||||||
inline Vk::QueueHandle& GetGraphicsQueue();
|
inline Vk::QueueHandle& GetGraphicsQueue();
|
||||||
|
|
@ -67,7 +67,7 @@ namespace Nz
|
||||||
bool SetupRenderPass();
|
bool SetupRenderPass();
|
||||||
bool SetupSwapchain(const Vk::PhysicalDevice& deviceInfo, Vk::Surface& surface, const Vector2ui& size);
|
bool SetupSwapchain(const Vk::PhysicalDevice& deviceInfo, Vk::Surface& surface, const Vector2ui& size);
|
||||||
|
|
||||||
std::optional<VulkanMultipleFramebuffer> m_framebuffer;
|
std::optional<VulkanWindowFramebuffer> m_framebuffer;
|
||||||
std::optional<VulkanRenderPass> m_renderPass;
|
std::optional<VulkanRenderPass> m_renderPass;
|
||||||
std::shared_ptr<VulkanDevice> m_device;
|
std::shared_ptr<VulkanDevice> m_device;
|
||||||
std::size_t m_currentFrame;
|
std::size_t m_currentFrame;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
inline const VulkanMultipleFramebuffer& VkRenderWindow::GetFramebuffer() const
|
inline const VulkanWindowFramebuffer& VkRenderWindow::GetFramebuffer() const
|
||||||
{
|
{
|
||||||
return *m_framebuffer;
|
return *m_framebuffer;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,24 +17,13 @@ namespace Nz
|
||||||
class NAZARA_VULKANRENDERER_API VulkanFramebuffer : public Framebuffer
|
class NAZARA_VULKANRENDERER_API VulkanFramebuffer : public Framebuffer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum class Type
|
using Framebuffer::Framebuffer;
|
||||||
{
|
|
||||||
Multiple,
|
|
||||||
Single
|
|
||||||
};
|
|
||||||
|
|
||||||
inline VulkanFramebuffer(Type type);
|
|
||||||
VulkanFramebuffer(const VulkanFramebuffer&) = delete;
|
VulkanFramebuffer(const VulkanFramebuffer&) = delete;
|
||||||
VulkanFramebuffer(VulkanFramebuffer&&) noexcept = default;
|
VulkanFramebuffer(VulkanFramebuffer&&) noexcept = default;
|
||||||
~VulkanFramebuffer() = default;
|
~VulkanFramebuffer() = default;
|
||||||
|
|
||||||
inline Type GetType() const;
|
|
||||||
|
|
||||||
VulkanFramebuffer& operator=(const VulkanFramebuffer&) = delete;
|
VulkanFramebuffer& operator=(const VulkanFramebuffer&) = delete;
|
||||||
VulkanFramebuffer& operator=(VulkanFramebuffer&&) noexcept = default;
|
VulkanFramebuffer& operator=(VulkanFramebuffer&&) noexcept = default;
|
||||||
|
|
||||||
private:
|
|
||||||
Type m_type;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,6 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
inline VulkanFramebuffer::VulkanFramebuffer(Type type) :
|
|
||||||
m_type(type)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline auto VulkanFramebuffer::GetType() const -> Type
|
|
||||||
{
|
|
||||||
return m_type;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/DebugOff.hpp>
|
#include <Nazara/VulkanRenderer/DebugOff.hpp>
|
||||||
|
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
// Copyright (C) 2020 Jérôme Leclercq
|
|
||||||
// This file is part of the "Nazara Engine - Renderer module"
|
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#ifndef NAZARA_VULKANRENDERER_VULKANMULTIPLEFRAMEBUFFER_HPP
|
|
||||||
#define NAZARA_VULKANRENDERER_VULKANMULTIPLEFRAMEBUFFER_HPP
|
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanFramebuffer.hpp>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace Nz
|
|
||||||
{
|
|
||||||
class NAZARA_VULKANRENDERER_API VulkanMultipleFramebuffer final : public VulkanFramebuffer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
inline VulkanMultipleFramebuffer(Vk::Framebuffer* framebuffers, std::size_t count);
|
|
||||||
VulkanMultipleFramebuffer(const VulkanMultipleFramebuffer&) = delete;
|
|
||||||
VulkanMultipleFramebuffer(VulkanMultipleFramebuffer&&) noexcept = default;
|
|
||||||
~VulkanMultipleFramebuffer() = default;
|
|
||||||
|
|
||||||
inline const Vk::Framebuffer& GetFramebuffer(std::size_t index) const;
|
|
||||||
inline std::size_t GetFramebufferCount() const;
|
|
||||||
|
|
||||||
VulkanMultipleFramebuffer& operator=(const VulkanMultipleFramebuffer&) = delete;
|
|
||||||
VulkanMultipleFramebuffer& operator=(VulkanMultipleFramebuffer&&) noexcept = default;
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<Vk::Framebuffer> m_framebuffers;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanMultipleFramebuffer.inl>
|
|
||||||
|
|
||||||
#endif // NAZARA_VULKANRENDERER_VULKANMULTIPLEFRAMEBUFFER_HPP
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
// Copyright (C) 2020 Jérôme Leclercq
|
|
||||||
// This file is part of the "Nazara Engine - Renderer module"
|
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#ifndef NAZARA_VULKANRENDERER_VULKANSINGLEFRAMEBUFFER_HPP
|
|
||||||
#define NAZARA_VULKANRENDERER_VULKANSINGLEFRAMEBUFFER_HPP
|
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanFramebuffer.hpp>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
namespace Nz
|
|
||||||
{
|
|
||||||
class RenderPass;
|
|
||||||
class Texture;
|
|
||||||
|
|
||||||
class NAZARA_VULKANRENDERER_API VulkanSingleFramebuffer final : public VulkanFramebuffer
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
VulkanSingleFramebuffer(Vk::Device& device, unsigned int width, unsigned int height, const std::shared_ptr<RenderPass>& renderPass, const std::vector<std::shared_ptr<Texture>>& attachments);
|
|
||||||
VulkanSingleFramebuffer(const VulkanSingleFramebuffer&) = delete;
|
|
||||||
VulkanSingleFramebuffer(VulkanSingleFramebuffer&&) = delete;
|
|
||||||
~VulkanSingleFramebuffer() = default;
|
|
||||||
|
|
||||||
inline Vk::Framebuffer& GetFramebuffer();
|
|
||||||
inline const Vk::Framebuffer& GetFramebuffer() const;
|
|
||||||
|
|
||||||
VulkanSingleFramebuffer& operator=(const VulkanSingleFramebuffer&) = delete;
|
|
||||||
VulkanSingleFramebuffer& operator=(VulkanSingleFramebuffer&&) = delete;
|
|
||||||
|
|
||||||
private:
|
|
||||||
Vk::Framebuffer m_framebuffer;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanSingleFramebuffer.inl>
|
|
||||||
|
|
||||||
#endif // NAZARA_VULKANRENDERER_VULKANSINGLEFRAMEBUFFER_HPP
|
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
// Copyright (C) 2020 Jérôme Leclercq
|
||||||
|
// This file is part of the "Nazara Engine - Renderer module"
|
||||||
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef NAZARA_VULKANRENDERER_VULKANTEXTUREFRAMEBUFFER_HPP
|
||||||
|
#define NAZARA_VULKANRENDERER_VULKANTEXTUREFRAMEBUFFER_HPP
|
||||||
|
|
||||||
|
#include <Nazara/VulkanRenderer/VulkanFramebuffer.hpp>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
namespace Nz
|
||||||
|
{
|
||||||
|
class RenderPass;
|
||||||
|
class Texture;
|
||||||
|
|
||||||
|
class NAZARA_VULKANRENDERER_API VulkanTextureFramebuffer final : public VulkanFramebuffer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
VulkanTextureFramebuffer(Vk::Device& device, unsigned int width, unsigned int height, const std::shared_ptr<RenderPass>& renderPass, const std::vector<std::shared_ptr<Texture>>& attachments);
|
||||||
|
VulkanTextureFramebuffer(const VulkanTextureFramebuffer&) = delete;
|
||||||
|
VulkanTextureFramebuffer(VulkanTextureFramebuffer&&) = delete;
|
||||||
|
~VulkanTextureFramebuffer() = default;
|
||||||
|
|
||||||
|
inline Vk::Framebuffer& GetFramebuffer();
|
||||||
|
inline const Vk::Framebuffer& GetFramebuffer() const;
|
||||||
|
|
||||||
|
VulkanTextureFramebuffer& operator=(const VulkanTextureFramebuffer&) = delete;
|
||||||
|
VulkanTextureFramebuffer& operator=(VulkanTextureFramebuffer&&) = delete;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Vk::Framebuffer m_framebuffer;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <Nazara/VulkanRenderer/VulkanTextureFramebuffer.inl>
|
||||||
|
|
||||||
|
#endif // NAZARA_VULKANRENDERER_VULKANTEXTUREFRAMEBUFFER_HPP
|
||||||
|
|
@ -2,17 +2,17 @@
|
||||||
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanSingleFramebuffer.hpp>
|
#include <Nazara/VulkanRenderer/VulkanTextureFramebuffer.hpp>
|
||||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
inline Vk::Framebuffer& VulkanSingleFramebuffer::GetFramebuffer()
|
inline Vk::Framebuffer& VulkanTextureFramebuffer::GetFramebuffer()
|
||||||
{
|
{
|
||||||
return m_framebuffer;
|
return m_framebuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const Vk::Framebuffer& VulkanSingleFramebuffer::GetFramebuffer() const
|
inline const Vk::Framebuffer& VulkanTextureFramebuffer::GetFramebuffer() const
|
||||||
{
|
{
|
||||||
return m_framebuffer;
|
return m_framebuffer;
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
// Copyright (C) 2020 Jérôme Leclercq
|
||||||
|
// This file is part of the "Nazara Engine - Renderer module"
|
||||||
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifndef NAZARA_VULKANRENDERER_VULKANWINDOWFRAMEBUFFER_HPP
|
||||||
|
#define NAZARA_VULKANRENDERER_VULKANWINDOWFRAMEBUFFER_HPP
|
||||||
|
|
||||||
|
#include <Nazara/VulkanRenderer/VulkanFramebuffer.hpp>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace Nz
|
||||||
|
{
|
||||||
|
class NAZARA_VULKANRENDERER_API VulkanWindowFramebuffer final : public VulkanFramebuffer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
inline VulkanWindowFramebuffer(Vk::Framebuffer* framebuffers, std::size_t count);
|
||||||
|
VulkanWindowFramebuffer(const VulkanWindowFramebuffer&) = delete;
|
||||||
|
VulkanWindowFramebuffer(VulkanWindowFramebuffer&&) noexcept = default;
|
||||||
|
~VulkanWindowFramebuffer() = default;
|
||||||
|
|
||||||
|
inline const Vk::Framebuffer& GetFramebuffer(std::size_t index) const;
|
||||||
|
inline std::size_t GetFramebufferCount() const;
|
||||||
|
|
||||||
|
VulkanWindowFramebuffer& operator=(const VulkanWindowFramebuffer&) = delete;
|
||||||
|
VulkanWindowFramebuffer& operator=(VulkanWindowFramebuffer&&) noexcept = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<Vk::Framebuffer> m_framebuffers;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <Nazara/VulkanRenderer/VulkanWindowFramebuffer.inl>
|
||||||
|
|
||||||
|
#endif // NAZARA_VULKANRENDERER_VULKANWINDOWFRAMEBUFFER_HPP
|
||||||
|
|
@ -2,26 +2,26 @@
|
||||||
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanMultipleFramebuffer.hpp>
|
#include <Nazara/VulkanRenderer/VulkanWindowFramebuffer.hpp>
|
||||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
inline VulkanMultipleFramebuffer::VulkanMultipleFramebuffer(Vk::Framebuffer* framebuffers, std::size_t count) :
|
inline VulkanWindowFramebuffer::VulkanWindowFramebuffer(Vk::Framebuffer* framebuffers, std::size_t count) :
|
||||||
VulkanFramebuffer(Type::Multiple)
|
VulkanFramebuffer(FramebufferType::Window)
|
||||||
{
|
{
|
||||||
m_framebuffers.reserve(count);
|
m_framebuffers.reserve(count);
|
||||||
for (std::size_t i = 0; i < count; ++i)
|
for (std::size_t i = 0; i < count; ++i)
|
||||||
m_framebuffers.push_back(std::move(framebuffers[i]));
|
m_framebuffers.push_back(std::move(framebuffers[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const Vk::Framebuffer& Nz::VulkanMultipleFramebuffer::GetFramebuffer(std::size_t index) const
|
inline const Vk::Framebuffer& Nz::VulkanWindowFramebuffer::GetFramebuffer(std::size_t index) const
|
||||||
{
|
{
|
||||||
assert(index < m_framebuffers.size());
|
assert(index < m_framebuffers.size());
|
||||||
return m_framebuffers[index];
|
return m_framebuffers[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::size_t VulkanMultipleFramebuffer::GetFramebufferCount() const
|
inline std::size_t VulkanWindowFramebuffer::GetFramebufferCount() const
|
||||||
{
|
{
|
||||||
return m_framebuffers.size();
|
return m_framebuffers.size();
|
||||||
}
|
}
|
||||||
|
|
@ -144,7 +144,7 @@ namespace Nz
|
||||||
|
|
||||||
StackVector<GLenum> invalidateAttachments = NazaraStackVector(GLenum, colorBufferCount + 1);
|
StackVector<GLenum> invalidateAttachments = NazaraStackVector(GLenum, colorBufferCount + 1);
|
||||||
|
|
||||||
if (command.framebuffer->GetType() == OpenGLFramebuffer::Type::FBO)
|
if (command.framebuffer->GetType() == FramebufferType::Texture)
|
||||||
{
|
{
|
||||||
context->glDrawBuffers(GLsizei(colorBufferCount), fboDrawBuffers.data());
|
context->glDrawBuffers(GLsizei(colorBufferCount), fboDrawBuffers.data());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
OpenGLFboFramebuffer::OpenGLFboFramebuffer(OpenGLDevice& device, const std::vector<std::shared_ptr<Texture>>& attachments) :
|
OpenGLFboFramebuffer::OpenGLFboFramebuffer(OpenGLDevice& device, const std::vector<std::shared_ptr<Texture>>& attachments) :
|
||||||
OpenGLFramebuffer(OpenGLFramebuffer::Type::FBO)
|
OpenGLFramebuffer(FramebufferType::Texture)
|
||||||
{
|
{
|
||||||
if (!m_framebuffer.Create(device))
|
if (!m_framebuffer.Create(device))
|
||||||
throw std::runtime_error("failed to create framebuffer object");
|
throw std::runtime_error("failed to create framebuffer object");
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,11 @@
|
||||||
#include <Nazara/VulkanRenderer/VulkanCommandBufferBuilder.hpp>
|
#include <Nazara/VulkanRenderer/VulkanCommandBufferBuilder.hpp>
|
||||||
#include <Nazara/Core/StackArray.hpp>
|
#include <Nazara/Core/StackArray.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanBuffer.hpp>
|
#include <Nazara/VulkanRenderer/VulkanBuffer.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanMultipleFramebuffer.hpp>
|
#include <Nazara/VulkanRenderer/VulkanWindowFramebuffer.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanRenderPass.hpp>
|
#include <Nazara/VulkanRenderer/VulkanRenderPass.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanRenderPipeline.hpp>
|
#include <Nazara/VulkanRenderer/VulkanRenderPipeline.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanRenderPipelineLayout.hpp>
|
#include <Nazara/VulkanRenderer/VulkanRenderPipelineLayout.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanSingleFramebuffer.hpp>
|
#include <Nazara/VulkanRenderer/VulkanTextureFramebuffer.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanShaderBinding.hpp>
|
#include <Nazara/VulkanRenderer/VulkanShaderBinding.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanTexture.hpp>
|
#include <Nazara/VulkanRenderer/VulkanTexture.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanUploadPool.hpp>
|
#include <Nazara/VulkanRenderer/VulkanUploadPool.hpp>
|
||||||
|
|
@ -33,21 +33,20 @@ namespace Nz
|
||||||
|
|
||||||
const Vk::Framebuffer& vkFramebuffer = [&] () -> const Vk::Framebuffer&
|
const Vk::Framebuffer& vkFramebuffer = [&] () -> const Vk::Framebuffer&
|
||||||
{
|
{
|
||||||
const VulkanFramebuffer& vkFramebuffer = static_cast<const VulkanFramebuffer&>(framebuffer);
|
switch (framebuffer.GetType())
|
||||||
switch (vkFramebuffer.GetType())
|
|
||||||
{
|
{
|
||||||
case VulkanFramebuffer::Type::Multiple:
|
case FramebufferType::Texture:
|
||||||
|
return static_cast<const VulkanTextureFramebuffer&>(framebuffer).GetFramebuffer();
|
||||||
|
|
||||||
|
case FramebufferType::Window:
|
||||||
{
|
{
|
||||||
const VulkanMultipleFramebuffer& vkMultipleFramebuffer = static_cast<const VulkanMultipleFramebuffer&>(vkFramebuffer);
|
const VulkanWindowFramebuffer& vkMultipleFramebuffer = static_cast<const VulkanWindowFramebuffer&>(framebuffer);
|
||||||
m_framebufferCount = std::max(m_framebufferCount, vkMultipleFramebuffer.GetFramebufferCount());
|
m_framebufferCount = std::max(m_framebufferCount, vkMultipleFramebuffer.GetFramebufferCount());
|
||||||
return vkMultipleFramebuffer.GetFramebuffer(m_imageIndex);
|
return vkMultipleFramebuffer.GetFramebuffer(m_imageIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
case VulkanFramebuffer::Type::Single:
|
|
||||||
return static_cast<const VulkanSingleFramebuffer&>(vkFramebuffer).GetFramebuffer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
throw std::runtime_error("Unhandled framebuffer type " + std::to_string(UnderlyingCast(vkFramebuffer.GetType())));
|
throw std::runtime_error("Unhandled framebuffer type " + std::to_string(UnderlyingCast(framebuffer.GetType())));
|
||||||
}();
|
}();
|
||||||
|
|
||||||
std::size_t attachmentCount = vkRenderPass.GetAttachmentCount();
|
std::size_t attachmentCount = vkRenderPass.GetAttachmentCount();
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@
|
||||||
#include <Nazara/VulkanRenderer/VulkanRenderPipeline.hpp>
|
#include <Nazara/VulkanRenderer/VulkanRenderPipeline.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanRenderPipelineLayout.hpp>
|
#include <Nazara/VulkanRenderer/VulkanRenderPipelineLayout.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanShaderModule.hpp>
|
#include <Nazara/VulkanRenderer/VulkanShaderModule.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanSingleFramebuffer.hpp>
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanTexture.hpp>
|
#include <Nazara/VulkanRenderer/VulkanTexture.hpp>
|
||||||
|
#include <Nazara/VulkanRenderer/VulkanTextureFramebuffer.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanTextureSampler.hpp>
|
#include <Nazara/VulkanRenderer/VulkanTextureSampler.hpp>
|
||||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||||
|
|
||||||
|
|
@ -34,7 +34,7 @@ namespace Nz
|
||||||
|
|
||||||
std::shared_ptr<Framebuffer> VulkanDevice::InstantiateFramebuffer(unsigned int width, unsigned int height, const std::shared_ptr<RenderPass>& renderPass, const std::vector<std::shared_ptr<Texture>>& attachments)
|
std::shared_ptr<Framebuffer> VulkanDevice::InstantiateFramebuffer(unsigned int width, unsigned int height, const std::shared_ptr<RenderPass>& renderPass, const std::vector<std::shared_ptr<Texture>>& attachments)
|
||||||
{
|
{
|
||||||
return std::make_shared<VulkanSingleFramebuffer>(*this, width, height, renderPass, attachments);
|
return std::make_shared<VulkanTextureFramebuffer>(*this, width, height, renderPass, attachments);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<RenderPass> VulkanDevice::InstantiateRenderPass(std::vector<RenderPass::Attachment> attachments, std::vector<RenderPass::SubpassDescription> subpassDescriptions, std::vector<RenderPass::SubpassDependency> subpassDependencies)
|
std::shared_ptr<RenderPass> VulkanDevice::InstantiateRenderPass(std::vector<RenderPass::Attachment> attachments, std::vector<RenderPass::SubpassDescription> subpassDescriptions, std::vector<RenderPass::SubpassDependency> subpassDependencies)
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanSingleFramebuffer.hpp>
|
#include <Nazara/VulkanRenderer/VulkanTextureFramebuffer.hpp>
|
||||||
#include <Nazara/Core/StackArray.hpp>
|
#include <Nazara/Core/StackArray.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanRenderPass.hpp>
|
#include <Nazara/VulkanRenderer/VulkanRenderPass.hpp>
|
||||||
#include <Nazara/VulkanRenderer/VulkanTexture.hpp>
|
#include <Nazara/VulkanRenderer/VulkanTexture.hpp>
|
||||||
|
|
@ -11,8 +11,8 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
VulkanSingleFramebuffer::VulkanSingleFramebuffer(Vk::Device& device, unsigned int width, unsigned int height, const std::shared_ptr<RenderPass>& renderPass, const std::vector<std::shared_ptr<Texture>>& attachments) :
|
VulkanTextureFramebuffer::VulkanTextureFramebuffer(Vk::Device& device, unsigned int width, unsigned int height, const std::shared_ptr<RenderPass>& renderPass, const std::vector<std::shared_ptr<Texture>>& attachments) :
|
||||||
VulkanFramebuffer(Type::Single)
|
VulkanFramebuffer(FramebufferType::Texture)
|
||||||
{
|
{
|
||||||
assert(renderPass);
|
assert(renderPass);
|
||||||
const VulkanRenderPass& vkRenderPass = static_cast<const VulkanRenderPass&>(*renderPass);
|
const VulkanRenderPass& vkRenderPass = static_cast<const VulkanRenderPass&>(*renderPass);
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
// This file is part of the "Nazara Engine - Vulkan Renderer"
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
#include <Nazara/VulkanRenderer/VulkanMultipleFramebuffer.hpp>
|
#include <Nazara/VulkanRenderer/VulkanWindowFramebuffer.hpp>
|
||||||
#include <Nazara/VulkanRenderer/Debug.hpp>
|
#include <Nazara/VulkanRenderer/Debug.hpp>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
Loading…
Reference in New Issue