Renderer: RenderWindow now requires a RenderDevice

This commit is contained in:
Lynix
2021-05-16 23:13:00 +02:00
parent 40772f2137
commit 13feaf4aab
30 changed files with 132 additions and 107 deletions

View File

@@ -31,7 +31,7 @@ namespace Nz
Graphics(Config config);
~Graphics();
inline RenderDevice& GetRenderDevice();
inline const std::shared_ptr<RenderDevice>& GetRenderDevice() const;
inline TextureSamplerCache& GetSamplerCache();
inline const std::shared_ptr<AbstractBuffer>& GetViewerDataUBO();

View File

@@ -7,9 +7,9 @@
namespace Nz
{
inline RenderDevice& Graphics::GetRenderDevice()
inline const std::shared_ptr<RenderDevice>& Graphics::GetRenderDevice() const
{
return *m_renderDevice;
return m_renderDevice;
}
inline TextureSamplerCache& Graphics::GetSamplerCache()

View File

@@ -51,7 +51,7 @@ namespace Nz
});
}
m_pipelineLayout = Graphics::Instance()->GetRenderDevice().InstantiateRenderPipelineLayout(std::move(info));
m_pipelineLayout = Graphics::Instance()->GetRenderDevice()->InstantiateRenderPipelineLayout(std::move(info));
}
inline auto MaterialSettings::GetBuilderData() const -> const Builder&

View File

@@ -37,13 +37,10 @@ namespace Nz
const OpenGLFramebuffer& GetFramebuffer() const override;
const OpenGLRenderPass& GetRenderPass() const override;
std::shared_ptr<RenderDevice> GetRenderDevice() override;
void Present();
private:
std::size_t m_currentFrame;
std::shared_ptr<OpenGLDevice> m_device;
std::vector<std::unique_ptr<OpenGLRenderImage>> m_renderImage;
std::unique_ptr<GL::Context> m_context;
OpenGLRenderPass m_renderPass;

View File

@@ -19,7 +19,7 @@ namespace Nz
class NAZARA_OPENGLRENDERER_API OpenGLRenderer : public RendererImpl
{
public:
OpenGLRenderer() = default;
OpenGLRenderer();
~OpenGLRenderer();
std::unique_ptr<RenderSurface> CreateRenderSurfaceImpl() override;
@@ -30,7 +30,7 @@ namespace Nz
RenderAPI QueryAPI() const override;
std::string QueryAPIString() const override;
UInt32 QueryAPIVersion() const override;
std::vector<RenderDeviceInfo> QueryRenderDevices() const override;
const std::vector<RenderDeviceInfo>& QueryRenderDevices() const override;
bool Prepare(const ParameterList& parameters) override;
@@ -39,6 +39,7 @@ namespace Nz
std::shared_ptr<OpenGLDevice> m_device;
std::unique_ptr<GL::Loader> m_loader;
std::vector<RenderDeviceInfo> m_deviceInfos;
};
}

View File

@@ -25,19 +25,19 @@ namespace Nz
{
public:
inline RenderWindow();
inline RenderWindow(VideoMode mode, const std::string& title, WindowStyleFlags style = WindowStyle_Default, const RenderWindowParameters& parameters = RenderWindowParameters());
inline explicit RenderWindow(void* handle, const RenderWindowParameters &parameters = RenderWindowParameters());
inline RenderWindow(std::shared_ptr<RenderDevice> renderDevice, VideoMode mode, const std::string& title, WindowStyleFlags style = WindowStyle_Default, const RenderWindowParameters& parameters = RenderWindowParameters());
inline RenderWindow(std::shared_ptr<RenderDevice> renderDevice, void* handle, const RenderWindowParameters& parameters = RenderWindowParameters());
inline ~RenderWindow();
inline bool Create(VideoMode mode, const std::string& title, WindowStyleFlags style = WindowStyle_Default, const RenderWindowParameters& parameters = RenderWindowParameters());
inline bool Create(void* handle, const RenderWindowParameters &parameters = RenderWindowParameters());
bool Create(std::shared_ptr<RenderDevice> renderDevice, VideoMode mode, const std::string& title, WindowStyleFlags style = WindowStyle_Default, const RenderWindowParameters& parameters = RenderWindowParameters());
bool Create(std::shared_ptr<RenderDevice> renderDevice, void* handle, const RenderWindowParameters &parameters = RenderWindowParameters());
void Display();
void EnableVerticalSync(bool enabled);
inline RenderWindowImpl* GetImpl();
std::shared_ptr<RenderDevice> GetRenderDevice();
inline const std::shared_ptr<RenderDevice>& GetRenderDevice() const;
inline RenderSurface* GetSurface();
inline bool IsValid() const;
@@ -53,9 +53,10 @@ namespace Nz
void OnWindowResized() override;
private:
std::shared_ptr<RenderDevice> m_renderDevice;
std::unique_ptr<RenderSurface> m_surface;
std::unique_ptr<RenderWindowImpl> m_impl;
Clock m_clock;
std::unique_ptr<RenderSurface> m_surface;
RenderWindowParameters m_parameters;
unsigned int m_framerateLimit;
};

View File

@@ -12,19 +12,19 @@ namespace Nz
{
}
inline RenderWindow::RenderWindow(VideoMode mode, const std::string& title, WindowStyleFlags style, const RenderWindowParameters& parameters) :
inline RenderWindow::RenderWindow(std::shared_ptr<RenderDevice> renderDevice, VideoMode mode, const std::string& title, WindowStyleFlags style, const RenderWindowParameters& parameters) :
RenderWindow()
{
ErrorFlags errFlags(ErrorFlag_ThrowException, true);
Create(mode, title, style, parameters);
Create(std::move(renderDevice), mode, title, style, parameters);
}
inline RenderWindow::RenderWindow(void* handle, const RenderWindowParameters& parameters)
inline RenderWindow::RenderWindow(std::shared_ptr<RenderDevice> renderDevice, void* handle, const RenderWindowParameters& parameters)
{
ErrorFlags errFlags(ErrorFlag_ThrowException, true);
Create(handle, parameters);
Create(std::move(renderDevice), handle, parameters);
}
inline RenderWindow::~RenderWindow()
@@ -32,25 +32,16 @@ namespace Nz
Destroy();
}
inline bool RenderWindow::Create(VideoMode mode, const std::string& title, WindowStyleFlags style, const RenderWindowParameters& parameters)
{
m_parameters = parameters;
return Window::Create(mode, title, style);
}
inline bool RenderWindow::Create(void* handle, const RenderWindowParameters& parameters)
{
m_parameters = parameters;
return Window::Create(handle);
}
inline RenderWindowImpl* RenderWindow::GetImpl()
{
return m_impl.get();
}
inline const std::shared_ptr<RenderDevice>& RenderWindow::GetRenderDevice() const
{
return m_renderDevice;
}
inline RenderSurface* RenderWindow::GetSurface()
{
return m_surface.get();

View File

@@ -20,6 +20,7 @@ namespace Nz
class CommandPool;
class Framebuffer;
class RendererImpl;
class RenderDevice;
class RenderPass;
class RenderSurface;
@@ -35,7 +36,6 @@ namespace Nz
virtual std::shared_ptr<CommandPool> CreateCommandPool(QueueType queueType) = 0;
virtual const Framebuffer& GetFramebuffer() const = 0;
virtual std::shared_ptr<RenderDevice> GetRenderDevice() = 0;
virtual const RenderPass& GetRenderPass() const = 0;
};
}

View File

@@ -34,6 +34,14 @@ namespace Nz
inline RendererImpl* GetRendererImpl();
std::shared_ptr<RenderDevice> InstanciateRenderDevice(std::size_t deviceIndex);
RenderAPI QueryAPI() const;
std::string QueryAPIString() const;
UInt32 QueryAPIVersion() const;
const std::vector<RenderDeviceInfo>& QueryRenderDevices() const;
struct Config
{
Nz::RenderAPI preferredAPI = Nz::RenderAPI::Unknown;

View File

@@ -43,7 +43,7 @@ namespace Nz
virtual std::string QueryAPIString() const = 0;
virtual UInt32 QueryAPIVersion() const = 0;
virtual std::vector<RenderDeviceInfo> QueryRenderDevices() const = 0;
virtual const std::vector<RenderDeviceInfo>& QueryRenderDevices() const = 0;
virtual bool Prepare(const ParameterList& parameters) = 0;
};

View File

@@ -55,8 +55,6 @@ namespace Nz
inline const VulkanRenderPass& GetRenderPass() const override;
inline const Vk::Swapchain& GetSwapchain() const;
inline std::shared_ptr<RenderDevice> GetRenderDevice() override;
void Present(UInt32 imageIndex, VkSemaphore waitSemaphore = VK_NULL_HANDLE);
VkRenderWindow& operator=(const VkRenderWindow&) = delete;

View File

@@ -36,11 +36,6 @@ namespace Nz
{
return m_swapchain;
}
inline std::shared_ptr<RenderDevice> VkRenderWindow::GetRenderDevice()
{
return m_device;
}
}
#include <Nazara/VulkanRenderer/DebugOff.hpp>

View File

@@ -33,7 +33,7 @@ namespace Nz
RenderAPI QueryAPI() const override;
std::string QueryAPIString() const override;
UInt32 QueryAPIVersion() const override;
std::vector<RenderDeviceInfo> QueryRenderDevices() const override;
const std::vector<RenderDeviceInfo>& QueryRenderDevices() const override;
bool Prepare(const ParameterList& parameters) override;
@@ -41,6 +41,7 @@ namespace Nz
private:
std::list<Vk::Device> m_devices;
std::vector<RenderDeviceInfo> m_deviceInfos;
ParameterList m_initializationParameters;
Vk::Instance m_instance;
};