From 8d06c57d0d8cca56487f571da5f8b22d0bc92510 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sat, 29 Oct 2016 00:52:25 +0200 Subject: [PATCH] Renderer: Add support for hardware buffers --- include/Nazara/Renderer/Renderer.hpp | 6 ++++++ include/Nazara/Renderer/RendererImpl.hpp | 4 ++++ src/Nazara/Renderer/Renderer.cpp | 10 ++++++++++ 3 files changed, 20 insertions(+) diff --git a/include/Nazara/Renderer/Renderer.hpp b/include/Nazara/Renderer/Renderer.hpp index cd680d412..195b9b40a 100644 --- a/include/Nazara/Renderer/Renderer.hpp +++ b/include/Nazara/Renderer/Renderer.hpp @@ -11,9 +11,13 @@ #include #include #include +#include namespace Nz { + class AbstractBuffer; + class Buffer; + class NAZARA_RENDERER_API Renderer { public: @@ -31,6 +35,8 @@ namespace Nz static void Uninitialize(); private: + static AbstractBuffer* CreateHardwareBufferImpl(Buffer* parent, BufferType type); + static std::unique_ptr s_rendererImpl; static DynLib s_rendererLib; static ParameterList s_initializationParameters; diff --git a/include/Nazara/Renderer/RendererImpl.hpp b/include/Nazara/Renderer/RendererImpl.hpp index 4c88773dd..758765492 100644 --- a/include/Nazara/Renderer/RendererImpl.hpp +++ b/include/Nazara/Renderer/RendererImpl.hpp @@ -13,10 +13,13 @@ #include #include #include +#include #include namespace Nz { + class AbstractBuffer; + class Buffer; class RendererImpl; class RenderWindowImpl; @@ -28,6 +31,7 @@ namespace Nz RendererImpl() = default; virtual ~RendererImpl(); + virtual std::unique_ptr CreateHardwareBufferImpl(Buffer* parent, BufferType type) = 0; virtual std::unique_ptr CreateRenderWindowImpl() = 0; virtual bool IsBetterThan(const RendererImpl* other) const = 0; diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index efd33fd14..cece28a91 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -86,6 +87,8 @@ namespace Nz NazaraDebug("Using " + s_rendererImpl->QueryAPIString() + " as renderer"); + Buffer::SetBufferFactory(DataStorage_Hardware, CreateHardwareBufferImpl); + onExit.Reset(); NazaraNotice("Initialized: Renderer module"); @@ -106,6 +109,8 @@ namespace Nz s_moduleReferenceCounter = 0; // Uninitialize module here + Buffer::SetBufferFactory(DataStorage_Hardware, nullptr); + s_rendererImpl.reset(); s_rendererLib.Unload(); @@ -115,6 +120,11 @@ namespace Nz Utility::Uninitialize(); } + AbstractBuffer* Renderer::CreateHardwareBufferImpl(Buffer * parent, BufferType type) + { + return s_rendererImpl->CreateHardwareBufferImpl(parent, type).release(); + } + std::unique_ptr Renderer::s_rendererImpl; DynLib Renderer::s_rendererLib; ParameterList Renderer::s_initializationParameters;