diff --git a/libs/app/source/app.cpp b/libs/app/source/app.cpp index 9b6e6f8c..ba165847 100644 --- a/libs/app/source/app.cpp +++ b/libs/app/source/app.cpp @@ -52,7 +52,7 @@ namespace psemek::app {} app::app(std::string const & name, int multisampling) - : pimpl_{std::make_unique(this)} + : pimpl_{make_impl(this)} { impl().start_time = clock::now(); diff --git a/libs/audio/source/engine.cpp b/libs/audio/source/engine.cpp index 362a1a14..d393e4a4 100644 --- a/libs/audio/source/engine.cpp +++ b/libs/audio/source/engine.cpp @@ -185,7 +185,7 @@ namespace psemek::audio if (auto p = instance_ptr.lock(); p) return p; - auto p = std::make_shared(); + auto p = make_impl(); instance_ptr = p; return p; } diff --git a/libs/gfx/source/effect/blur.cpp b/libs/gfx/source/effect/blur.cpp index 729f3d32..fff3d60f 100644 --- a/libs/gfx/source/effect/blur.cpp +++ b/libs/gfx/source/effect/blur.cpp @@ -139,7 +139,7 @@ void main() }; hblur::hblur(int size, float sigma) - : pimpl_{std::make_unique(size, sigma, true)} + : pimpl_{make_impl(size, sigma, true)} {} hblur::~hblur() = default; @@ -156,7 +156,7 @@ void main() }; vblur::vblur(int size, float sigma) - : pimpl_{std::make_unique(size, sigma, false)} + : pimpl_{make_impl(size, sigma, false)} {} vblur::~vblur() = default; diff --git a/libs/gfx/source/effect/fxaa.cpp b/libs/gfx/source/effect/fxaa.cpp index 78034cb4..6cb4355a 100644 --- a/libs/gfx/source/effect/fxaa.cpp +++ b/libs/gfx/source/effect/fxaa.cpp @@ -212,7 +212,7 @@ void main() }; fxaa::fxaa() - : pimpl_{std::make_unique()} + : pimpl_{make_impl()} { impl().program.bind(); impl().program["u_input"] = 0; diff --git a/libs/gfx/source/effect/gamma.cpp b/libs/gfx/source/effect/gamma.cpp index b1e58e5d..a3743be5 100644 --- a/libs/gfx/source/effect/gamma.cpp +++ b/libs/gfx/source/effect/gamma.cpp @@ -54,7 +54,7 @@ void main() }; gamma_correction::gamma_correction() - : pimpl_{std::make_unique()} + : pimpl_{make_impl()} { impl().program.bind(); impl().program["u_input"] = 0; diff --git a/libs/gfx/source/effect/overlay.cpp b/libs/gfx/source/effect/overlay.cpp index 01463f76..8664a4a6 100644 --- a/libs/gfx/source/effect/overlay.cpp +++ b/libs/gfx/source/effect/overlay.cpp @@ -51,7 +51,7 @@ void main() }; overlay::overlay() - : pimpl_{std::make_unique()} + : pimpl_{make_impl()} { impl().program.bind(); impl().program["u_texture"] = 0; diff --git a/libs/gfx/source/painter.cpp b/libs/gfx/source/painter.cpp index 6e518566..16b9b819 100644 --- a/libs/gfx/source/painter.cpp +++ b/libs/gfx/source/painter.cpp @@ -175,7 +175,7 @@ namespace psemek::gfx }; painter::painter() - : pimpl_{std::make_unique()} + : pimpl_{make_impl()} {} painter::~painter() = default; diff --git a/libs/gfx/source/renderer/deferred.cpp b/libs/gfx/source/renderer/deferred.cpp index 9a5f61c6..700c21ff 100644 --- a/libs/gfx/source/renderer/deferred.cpp +++ b/libs/gfx/source/renderer/deferred.cpp @@ -878,7 +878,7 @@ void main(){} }; deferred_renderer::deferred_renderer() - : pimpl_{std::make_unique()} + : pimpl_{make_impl()} { impl().g_buffer_pass_program.bind(); impl().g_buffer_pass_program["u_texture"] = 0; diff --git a/libs/gfx/source/renderer/simple.cpp b/libs/gfx/source/renderer/simple.cpp index ad8f1f58..3dd99823 100644 --- a/libs/gfx/source/renderer/simple.cpp +++ b/libs/gfx/source/renderer/simple.cpp @@ -95,7 +95,7 @@ void main() }; simple_renderer::simple_renderer() - : pimpl_{std::make_unique()} + : pimpl_{make_impl()} {} simple_renderer::~simple_renderer() = default; diff --git a/libs/phys/source/engine_2d.cpp b/libs/phys/source/engine_2d.cpp index a8c98424..b747c675 100644 --- a/libs/phys/source/engine_2d.cpp +++ b/libs/phys/source/engine_2d.cpp @@ -1002,7 +1002,7 @@ namespace psemek::phys2d } engine::engine() - : pimpl_{std::make_unique()} + : pimpl_{make_impl()} {} engine::~engine() = default; diff --git a/libs/util/include/psemek/util/pimpl.hpp b/libs/util/include/psemek/util/pimpl.hpp index ea75ce0e..94e69bf9 100644 --- a/libs/util/include/psemek/util/pimpl.hpp +++ b/libs/util/include/psemek/util/pimpl.hpp @@ -7,13 +7,15 @@ struct impl; \ std::unique_ptr pimpl_; \ struct impl & impl() { return *pimpl_; } \ - struct impl const & impl() const { return *pimpl_; } + struct impl const & impl() const { return *pimpl_; } \ + template static auto make_impl(Args && ... args) { return std::make_unique(std::forward(args)...); } #define psemek_declare_shared_pimpl \ struct impl; \ std::shared_ptr pimpl_; \ struct impl & impl() { return *pimpl_; } \ - struct impl const & impl() const { return *pimpl_; } + struct impl const & impl() const { return *pimpl_; } \ + template static auto make_impl(Args && ... args) { return std::make_shared(std::forward(args)...); } namespace psemek::util::pimpl {