From ecc876045f33a69eee721665908aff03ab508fd5 Mon Sep 17 00:00:00 2001 From: Lucas OH <3687994+PtiLuky@users.noreply.github.com> Date: Wed, 6 Aug 2025 23:17:34 +0200 Subject: [PATCH] Replace some raw pointers by unique_ptr (#16304) --- src/client/clientlauncher.cpp | 2 +- src/client/game.cpp | 10 ++++--- src/client/meshgen/collector.cpp | 6 ++--- src/client/render/core.cpp | 16 +++++------- src/client/render/core.h | 10 ++++--- src/client/render/factory.cpp | 29 ++++++++++++--------- src/client/render/interlaced.h | 4 +-- src/client/render/sidebyside.h | 2 +- src/client/shader.cpp | 12 ++++----- src/client/shader.h | 4 +-- src/client/shadows/dynamicshadowsrender.cpp | 6 ++--- src/client/shadows/dynamicshadowsrender.h | 3 ++- 12 files changed, 56 insertions(+), 48 deletions(-) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index e8aa46463..59b8ddbab 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -122,7 +122,7 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) // This is only global so it can be used by RenderingEngine::draw_load_screen(). assert(!g_menucloudsmgr && !g_menuclouds); std::unique_ptr ssrc(createShaderSource()); - ssrc->addShaderUniformSetterFactory(new FogShaderUniformSetterFactory()); + ssrc->addShaderUniformSetterFactory(std::make_unique()); g_menucloudsmgr = m_rendering_engine->get_scene_manager()->createNewSceneManager(); g_menuclouds = new Clouds(g_menucloudsmgr, ssrc.get(), -1, rand()); g_menuclouds->setHeight(100.0f); diff --git a/src/client/game.cpp b/src/client/game.cpp index c2a6bd82e..cdf36a1a7 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1360,13 +1360,15 @@ bool Game::createClient(const GameStartData &start_data) return false; } - shader_src->addShaderConstantSetter(new NodeShaderConstantSetter()); + shader_src->addShaderConstantSetter( + std::make_unique()); - auto *scsf = new GameGlobalShaderUniformSetterFactory(client); - shader_src->addShaderUniformSetterFactory(scsf); + auto scsf_up = std::make_unique(client); + auto* scsf = scsf_up.get(); + shader_src->addShaderUniformSetterFactory(std::move(scsf_up)); shader_src->addShaderUniformSetterFactory( - new FogShaderUniformSetterFactory()); + std::make_unique()); ShadowRenderer::preInit(shader_src); diff --git a/src/client/meshgen/collector.cpp b/src/client/meshgen/collector.cpp index 6e3002624..f0261acc6 100644 --- a/src/client/meshgen/collector.cpp +++ b/src/client/meshgen/collector.cpp @@ -11,10 +11,10 @@ void MeshCollector::append(const TileSpec &tile, const video::S3DVertex *vertice u32 numVertices, const u16 *indices, u32 numIndices) { for (int layernum = 0; layernum < MAX_TILE_LAYERS; layernum++) { - const TileLayer *layer = &tile.layers[layernum]; - if (layer->empty()) + const TileLayer &layer = tile.layers[layernum]; + if (layer.empty()) continue; - append(*layer, vertices, numVertices, indices, numIndices, layernum); + append(layer, vertices, numVertices, indices, numIndices, layernum); } } diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp index ef780269a..a3a309b30 100644 --- a/src/client/render/core.cpp +++ b/src/client/render/core.cpp @@ -9,17 +9,15 @@ #include "settings.h" RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud, - ShadowRenderer *_shadow_renderer, RenderPipeline *_pipeline, v2f _virtual_size_scale) - : device(_device), client(_client), hud(_hud), shadow_renderer(_shadow_renderer), - pipeline(_pipeline), virtual_size_scale(_virtual_size_scale) + std::unique_ptr _shadow_renderer, + std::unique_ptr _pipeline, + v2f _virtual_size_scale) + : device(_device), client(_client), hud(_hud), shadow_renderer(std::move(_shadow_renderer)), + pipeline(std::move(_pipeline)), virtual_size_scale(_virtual_size_scale) { } -RenderingCore::~RenderingCore() -{ - delete pipeline; - delete shadow_renderer; -} +RenderingCore::~RenderingCore() = default; void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _draw_wield_tool, bool _draw_crosshair) @@ -27,7 +25,7 @@ void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, v2u32 screensize = device->getVideoDriver()->getScreenSize(); virtual_size = v2u32(screensize.X * virtual_size_scale.X, screensize.Y * virtual_size_scale.Y); - PipelineContext context(device, client, hud, shadow_renderer, _skycolor, screensize); + PipelineContext context(device, client, hud, shadow_renderer.get(), _skycolor, screensize); context.draw_crosshair = _draw_crosshair; context.draw_wield_tool = _draw_wield_tool; context.show_hud = _show_hud; diff --git a/src/client/render/core.h b/src/client/render/core.h index c6854c411..e5c2c6386 100644 --- a/src/client/render/core.h +++ b/src/client/render/core.h @@ -7,6 +7,7 @@ #include "irr_v2d.h" #include +#include class IrrlichtDevice; @@ -21,16 +22,17 @@ protected: IrrlichtDevice *device; Client *client; Hud *hud; - ShadowRenderer *shadow_renderer; + std::unique_ptr shadow_renderer; - RenderPipeline *pipeline; + std::unique_ptr pipeline; v2f virtual_size_scale; v2u32 virtual_size { 0, 0 }; public: RenderingCore(IrrlichtDevice *device, Client *client, Hud *hud, - ShadowRenderer *shadow_renderer, RenderPipeline *pipeline, + std::unique_ptr shadow_renderer, + std::unique_ptr pipeline, v2f virtual_size_scale); RenderingCore(const RenderingCore &) = delete; RenderingCore(RenderingCore &&) = delete; @@ -44,5 +46,5 @@ public: v2u32 getVirtualSize() const; - ShadowRenderer *get_shadow_renderer() { return shadow_renderer; }; + ShadowRenderer *get_shadow_renderer() { return shadow_renderer.get(); }; }; diff --git a/src/client/render/factory.cpp b/src/client/render/factory.cpp index 55048b2d8..060e22670 100644 --- a/src/client/render/factory.cpp +++ b/src/client/render/factory.cpp @@ -4,6 +4,7 @@ // Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #include "factory.h" + #include "log.h" #include "plain.h" #include "anaglyph.h" @@ -12,11 +13,13 @@ #include "secondstage.h" #include "client/shadows/dynamicshadowsrender.h" +#include + struct CreatePipelineResult { v2f virtual_size_scale; - ShadowRenderer *shadow_renderer { nullptr }; - RenderPipeline *pipeline { nullptr }; + std::unique_ptr shadow_renderer; + std::unique_ptr pipeline; }; void createPipeline(const std::string &stereo_mode, IrrlichtDevice *device, Client *client, Hud *hud, CreatePipelineResult &result); @@ -27,44 +30,46 @@ RenderingCore *createRenderingCore(const std::string &stereo_mode, IrrlichtDevic CreatePipelineResult created_pipeline; createPipeline(stereo_mode, device, client, hud, created_pipeline); return new RenderingCore(device, client, hud, - created_pipeline.shadow_renderer, created_pipeline.pipeline, created_pipeline.virtual_size_scale); + std::move(created_pipeline.shadow_renderer), + std::move(created_pipeline.pipeline), + created_pipeline.virtual_size_scale); } void createPipeline(const std::string &stereo_mode, IrrlichtDevice *device, Client *client, Hud *hud, CreatePipelineResult &result) { result.shadow_renderer = createShadowRenderer(device, client); result.virtual_size_scale = v2f(1.0f); - result.pipeline = new RenderPipeline(); + result.pipeline = std::make_unique(); if (result.shadow_renderer) result.pipeline->addStep(); if (stereo_mode == "none") { - populatePlainPipeline(result.pipeline, client); + populatePlainPipeline(result.pipeline.get(), client); return; } if (stereo_mode == "anaglyph") { - populateAnaglyphPipeline(result.pipeline, client); + populateAnaglyphPipeline(result.pipeline.get(), client); return; } if (stereo_mode == "interlaced") { - populateInterlacedPipeline(result.pipeline, client); + populateInterlacedPipeline(result.pipeline.get(), client); return; } if (stereo_mode == "sidebyside") { - populateSideBySidePipeline(result.pipeline, client, false, false, result.virtual_size_scale); + populateSideBySidePipeline(result.pipeline.get(), client, false, false, result.virtual_size_scale); return; } if (stereo_mode == "topbottom") { - populateSideBySidePipeline(result.pipeline, client, true, false, result.virtual_size_scale); + populateSideBySidePipeline(result.pipeline.get(), client, true, false, result.virtual_size_scale); return; } if (stereo_mode == "crossview") { - populateSideBySidePipeline(result.pipeline, client, false, true, result.virtual_size_scale); + populateSideBySidePipeline(result.pipeline.get(), client, false, true, result.virtual_size_scale); return; } // fallback to plain renderer errorstream << "Invalid rendering mode: " << stereo_mode << std::endl; - populatePlainPipeline(result.pipeline, client); -} \ No newline at end of file + populatePlainPipeline(result.pipeline.get(), client); +} diff --git a/src/client/render/interlaced.h b/src/client/render/interlaced.h index 9d0e797e2..24992f110 100644 --- a/src/client/render/interlaced.h +++ b/src/client/render/interlaced.h @@ -4,13 +4,13 @@ // Copyright (C) 2017 numzero, Lobachevskiy Vitaliy #pragma once -#include "stereo.h" +#include "pipeline.h" class InitInterlacedMaskStep : public TrivialRenderStep { public: InitInterlacedMaskStep(TextureBuffer *buffer, u8 index); - void run(PipelineContext &context); + void run(PipelineContext &context) override; private: TextureBuffer *buffer; video::ITexture *last_mask { nullptr }; diff --git a/src/client/render/sidebyside.h b/src/client/render/sidebyside.h index 8c7b28583..e32c0dff1 100644 --- a/src/client/render/sidebyside.h +++ b/src/client/render/sidebyside.h @@ -23,4 +23,4 @@ private: RenderTarget *target; }; -void populateSideBySidePipeline(RenderPipeline *pipeline, Client *client, bool horizontal, bool flipped, v2f &virtual_size_scale); \ No newline at end of file +void populateSideBySidePipeline(RenderPipeline *pipeline, Client *client, bool horizontal, bool flipped, v2f &virtual_size_scale); diff --git a/src/client/shader.cpp b/src/client/shader.cpp index 3238969ff..fa3dfb045 100644 --- a/src/client/shader.cpp +++ b/src/client/shader.cpp @@ -378,14 +378,14 @@ public: // Shall be called from the main thread. void rebuildShaders() override; - void addShaderConstantSetter(IShaderConstantSetter *setter) override + void addShaderConstantSetter(std::unique_ptr setter) override { - m_constant_setters.emplace_back(setter); + m_constant_setters.emplace_back(std::move(setter)); } - void addShaderUniformSetterFactory(IShaderUniformSetterFactory *setter) override + void addShaderUniformSetterFactory(std::unique_ptr setter) override { - m_uniform_factories.emplace_back(setter); + m_uniform_factories.emplace_back(std::move(setter)); } private: @@ -441,8 +441,8 @@ ShaderSource::ShaderSource() m_shaderinfo_cache.emplace_back(); // Add global stuff - addShaderConstantSetter(new MainShaderConstantSetter()); - addShaderUniformSetterFactory(new MainShaderUniformSetterFactory()); + addShaderConstantSetter(std::make_unique()); + addShaderUniformSetterFactory(std::make_unique()); } ShaderSource::~ShaderSource() diff --git a/src/client/shader.h b/src/client/shader.h index 910117660..30d1c0ca1 100644 --- a/src/client/shader.h +++ b/src/client/shader.h @@ -274,10 +274,10 @@ public: virtual void rebuildShaders()=0; /// @note Takes ownership of @p setter. - virtual void addShaderConstantSetter(IShaderConstantSetter *setter) = 0; + virtual void addShaderConstantSetter(std::unique_ptr setter) = 0; /// @note Takes ownership of @p setter. - virtual void addShaderUniformSetterFactory(IShaderUniformSetterFactory *setter) = 0; + virtual void addShaderUniformSetterFactory(std::unique_ptr setter) = 0; }; IWritableShaderSource *createShaderSource(); diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp index dbabf6dd7..97e37168b 100644 --- a/src/client/shadows/dynamicshadowsrender.cpp +++ b/src/client/shadows/dynamicshadowsrender.cpp @@ -107,7 +107,7 @@ void ShadowRenderer::disable() void ShadowRenderer::preInit(IWritableShaderSource *shsrc) { if (g_settings->getBool("enable_dynamic_shadows")) { - shsrc->addShaderUniformSetterFactory(new ShadowUniformSetterFactory()); + shsrc->addShaderUniformSetterFactory(std::make_unique()); } } @@ -687,7 +687,7 @@ std::string ShadowRenderer::readShaderFile(const std::string &path) return prefix + content; } -ShadowRenderer *createShadowRenderer(IrrlichtDevice *device, Client *client) +std::unique_ptr createShadowRenderer(IrrlichtDevice *device, Client *client) { if (!g_settings->getBool("enable_dynamic_shadows")) return nullptr; @@ -701,7 +701,7 @@ ShadowRenderer *createShadowRenderer(IrrlichtDevice *device, Client *client) return nullptr; } - ShadowRenderer *shadow_renderer = new ShadowRenderer(device, client); + auto shadow_renderer = std::make_unique(device, client); shadow_renderer->initialize(); return shadow_renderer; } diff --git a/src/client/shadows/dynamicshadowsrender.h b/src/client/shadows/dynamicshadowsrender.h index 7026e39a9..5bdc97a82 100644 --- a/src/client/shadows/dynamicshadowsrender.h +++ b/src/client/shadows/dynamicshadowsrender.h @@ -6,6 +6,7 @@ #include #include +#include #include #include "client/shadows/dynamicshadows.h" #include @@ -165,4 +166,4 @@ private: * @param client Reference to the client context. * @return A new ShadowRenderer instance or nullptr if shadows are disabled or not supported. */ -ShadowRenderer *createShadowRenderer(IrrlichtDevice *device, Client *client); +std::unique_ptr createShadowRenderer(IrrlichtDevice *device, Client *client);