Skip to content

Commit 836b4ca

Browse files
committed
Change dynamic_cast to static_cast using downcast function
1 parent 2464325 commit 836b4ca

File tree

34 files changed

+87
-10
lines changed

34 files changed

+87
-10
lines changed

render_pipeline/rpcore/pluginbase/base_plugin.hpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,20 @@
3838
} \
3939
BOOST_DLL_ALIAS(::rpcpp_plugin_creator__, create_plugin)
4040

41+
#define RENDER_PIPELINE_PLUGIN_DOWNCAST_DECL() \
42+
void* downcast() override; \
43+
const void* downcast() const override;
44+
45+
#define RENDER_PIPELINE_PLUGIN_DOWNCAST_IMPL(PLUGIN_TYPE) \
46+
void* PLUGIN_TYPE::downcast() \
47+
{ \
48+
return dynamic_cast<PLUGIN_TYPE*>(this); \
49+
} \
50+
const void* PLUGIN_TYPE::downcast() const \
51+
{ \
52+
return dynamic_cast<const PLUGIN_TYPE*>(this); \
53+
}
54+
4155
// ************************************************************************************************
4256

4357
namespace boost {
@@ -107,6 +121,14 @@ class RENDER_PIPELINE_DECL BasePlugin : public RPObject
107121

108122
virtual RequrieType& get_required_plugins() const = 0;
109123

124+
/**
125+
* Downcast instance of plugin.
126+
*
127+
* Use static_cast<Plugin*>(BasePlugin::downcast()) to access downcasted instance.
128+
*/
129+
virtual void* downcast() = 0;
130+
virtual const void* downcast() const = 0;
131+
110132
/** Trigger hook. */
111133
///@{
112134
virtual void on_load() {}

src/rpcore/gui/debugger.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ AsyncTask::DoneStatus Debugger::update_stats(rppanda::FunctionalTask* task)
357357
LVecBase3f sun_vector(0);
358358
if (pipeline->get_plugin_mgr()->is_plugin_enabled("scattering"))
359359
{
360-
sun_vector = dynamic_cast<rpplugins::ScatteringPlugin*>(pipeline->get_plugin_mgr()->get_instance("scattering"))->get_sun_vector();
360+
sun_vector = static_cast<rpplugins::ScatteringPlugin*>(pipeline->get_plugin_mgr()->get_instance("scattering")->downcast())->get_sun_vector();
361361
}
362362

363363
const NodePath& camera = Globals::base->get_cam();
@@ -385,7 +385,7 @@ AsyncTask::DoneStatus Debugger::update_stats(rppanda::FunctionalTask* task)
385385

386386
LVecBase3f focus_point;
387387
float focus_size;
388-
bool exist = dynamic_cast<rpplugins::PSSMPlugin*>(pssm_plugin)->get_last_focus(focus_point, focus_size);
388+
bool exist = static_cast<rpplugins::PSSMPlugin*>(pssm_plugin->downcast())->get_last_focus(focus_point, focus_size);
389389

390390
if (exist)
391391
{

src/rpplugins/ao/src/plugin.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ RENDER_PIPELINE_PLUGIN_CREATOR(rpplugins::Plugin)
3131

3232
namespace rpplugins {
3333

34+
RENDER_PIPELINE_PLUGIN_DOWNCAST_IMPL(Plugin);
35+
3436
Plugin::RequrieType Plugin::require_plugins;
3537

3638
Plugin::Plugin(rpcore::RenderPipeline& pipeline): BasePlugin(pipeline, RPPLUGIN_ID_STRING)
@@ -39,6 +41,11 @@ Plugin::Plugin(rpcore::RenderPipeline& pipeline): BasePlugin(pipeline, RPPLUGIN_
3941

4042
Plugin::~Plugin() = default;
4143

44+
Plugin::RequrieType& Plugin::get_required_plugins() const
45+
{
46+
return require_plugins;
47+
}
48+
4249
void Plugin::on_stage_setup()
4350
{
4451
auto stage = std::make_unique<AOStage>(pipeline_);

src/rpplugins/ao/src/plugin.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ class Plugin : public rpcore::BasePlugin
3232
{
3333
public:
3434
Plugin(rpcore::RenderPipeline& pipeline);
35-
~Plugin() final;
35+
virtual ~Plugin();
3636

37-
RequrieType& get_required_plugins() const final { return require_plugins; }
37+
RequrieType& get_required_plugins() const final;
38+
39+
RENDER_PIPELINE_PLUGIN_DOWNCAST_DECL();
3840

3941
void on_stage_setup() final;
4042

src/rpplugins/bloom/src/plugin.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ RENDER_PIPELINE_PLUGIN_CREATOR(rpplugins::Plugin)
3232

3333
namespace rpplugins {
3434

35+
RENDER_PIPELINE_PLUGIN_DOWNCAST_IMPL(Plugin);
36+
3537
Plugin::RequrieType Plugin::require_plugins;
3638

3739
Plugin::Plugin(rpcore::RenderPipeline& pipeline): BasePlugin(pipeline, RPPLUGIN_ID_STRING)

src/rpplugins/bloom/src/plugin.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class Plugin : public rpcore::BasePlugin
3434
Plugin(rpcore::RenderPipeline& pipeline);
3535

3636
RequrieType& get_required_plugins() const final { return require_plugins; }
37+
RENDER_PIPELINE_PLUGIN_DOWNCAST_DECL();
3738

3839
void on_stage_setup() final;
3940
void on_pipeline_created() final;

src/rpplugins/clouds/src/plugin.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ RENDER_PIPELINE_PLUGIN_CREATOR(rpplugins::Plugin)
3030

3131
namespace rpplugins {
3232

33+
RENDER_PIPELINE_PLUGIN_DOWNCAST_IMPL(Plugin);
34+
3335
Plugin::RequrieType Plugin::require_plugins = { "scattering" };
3436

3537
Plugin::Plugin(rpcore::RenderPipeline& pipeline): BasePlugin(pipeline, RPPLUGIN_ID_STRING)

src/rpplugins/clouds/src/plugin.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class Plugin : public rpcore::BasePlugin
3434
Plugin(rpcore::RenderPipeline& pipeline);
3535

3636
RequrieType& get_required_plugins() const final { return require_plugins; }
37+
RENDER_PIPELINE_PLUGIN_DOWNCAST_DECL();
3738

3839
void on_stage_setup() final;
3940
void on_pipeline_created() final;

src/rpplugins/color_correction/src/plugin.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ RENDER_PIPELINE_PLUGIN_CREATOR(rpplugins::Plugin)
3232

3333
namespace rpplugins {
3434

35+
RENDER_PIPELINE_PLUGIN_DOWNCAST_IMPL(Plugin);
36+
3537
Plugin::RequrieType Plugin::require_plugins;
3638

3739
Plugin::Plugin(rpcore::RenderPipeline& pipeline): BasePlugin(pipeline, RPPLUGIN_ID_STRING)

src/rpplugins/color_correction/src/plugin.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class Plugin : public rpcore::BasePlugin
3838
Plugin(rpcore::RenderPipeline& pipeline);
3939

4040
RequrieType& get_required_plugins() const final { return require_plugins; }
41+
RENDER_PIPELINE_PLUGIN_DOWNCAST_DECL();
4142

4243
void on_pipeline_created() final;
4344
void on_stage_setup() final;

0 commit comments

Comments
 (0)