Skip to content

Commit 5a02c37

Browse files
committedMay 3, 2021
refacto: RenderingEngine::get_scene_manager() is now not callable from singleton
This permits to make evidence that we have some bad object passing on various code parts. I fixed majority of them to reduce the scope of passed objects Unfortunately, for some edge cases i should have to expose ISceneManager from client, this should be fixed in the future when our POO will be cleaner client side (we have a mix of rendering and processing in majority of the client objects, it works but it's not clean)
1 parent ccdd886 commit 5a02c37

11 files changed

+28
-23
lines changed
 

‎src/client/client.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -1475,6 +1475,11 @@ bool Client::updateWieldedItem()
14751475
return true;
14761476
}
14771477

1478+
irr::scene::ISceneManager* Client::getSceneManager()
1479+
{
1480+
return m_rendering_engine->get_scene_manager();
1481+
}
1482+
14781483
Inventory* Client::getInventory(const InventoryLocation &loc)
14791484
{
14801485
switch(loc.type){

‎src/client/client.h

+1
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,7 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
355355
void setCamera(Camera* camera) { m_camera = camera; }
356356

357357
Camera* getCamera () { return m_camera; }
358+
irr::scene::ISceneManager *getSceneManager();
358359

359360
bool shouldShowMinimap() const;
360361

‎src/client/clientenvironment.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ u16 ClientEnvironment::addActiveObject(ClientActiveObject *object)
352352
if (!m_ao_manager.registerObject(object))
353353
return 0;
354354

355-
object->addToScene(m_texturesource, RenderingEngine::get_scene_manager());
355+
object->addToScene(m_texturesource, m_client->getSceneManager());
356356

357357
// Update lighting immediately
358358
object->updateLight(getDayNightRatio());

‎src/client/content_mapblock.cpp

+7-9
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,16 @@ static constexpr u16 quad_indices[] = {0, 1, 2, 2, 3, 0};
6060

6161
const std::string MapblockMeshGenerator::raillike_groupname = "connect_to_raillike";
6262

63-
MapblockMeshGenerator::MapblockMeshGenerator(MeshMakeData *input, MeshCollector *output)
63+
MapblockMeshGenerator::MapblockMeshGenerator(MeshMakeData *input, MeshCollector *output,
64+
irr::scene::IMeshManipulator *mm):
65+
data(input),
66+
collector(output),
67+
nodedef(data->m_client->ndef()),
68+
meshmanip(mm),
69+
blockpos_nodes(data->m_blockpos * MAP_BLOCKSIZE)
6470
{
65-
data = input;
66-
collector = output;
67-
68-
nodedef = data->m_client->ndef();
69-
meshmanip = RenderingEngine::get_scene_manager()->getMeshManipulator();
70-
7171
enable_mesh_cache = g_settings->getBool("enable_mesh_cache") &&
7272
!data->m_smooth_lighting; // Mesh cache is not supported with smooth lighting
73-
74-
blockpos_nodes = data->m_blockpos * MAP_BLOCKSIZE;
7573
}
7674

7775
void MapblockMeshGenerator::useTile(int index, u8 set_flags, u8 reset_flags, bool special)

‎src/client/content_mapblock.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ class MapblockMeshGenerator
172172
void drawNode();
173173

174174
public:
175-
MapblockMeshGenerator(MeshMakeData *input, MeshCollector *output);
175+
MapblockMeshGenerator(MeshMakeData *input, MeshCollector *output,
176+
irr::scene::IMeshManipulator *mm);
176177
void generate();
177178
void renderSingle(content_t node, u8 param2 = 0x00);
178179
};

‎src/client/mapblock_mesh.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1072,8 +1072,8 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
10721072
*/
10731073

10741074
{
1075-
MapblockMeshGenerator generator(data, &collector);
1076-
generator.generate();
1075+
MapblockMeshGenerator(data, &collector,
1076+
data->m_client->getSceneManager()->getMeshManipulator()).generate();
10771077
}
10781078

10791079
/*

‎src/client/particles.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ Particle::Particle(
6464
v2f texsize,
6565
video::SColor color
6666
):
67-
scene::ISceneNode(RenderingEngine::get_scene_manager()->getRootSceneNode(),
68-
RenderingEngine::get_scene_manager())
67+
scene::ISceneNode(((Client *)gamedef)->getSceneManager()->getRootSceneNode(),
68+
((Client *)gamedef)->getSceneManager())
6969
{
7070
// Misc
7171
m_gamedef = gamedef;

‎src/client/renderingengine.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,9 @@ class RenderingEngine
7979
return s_singleton->m_device->getVideoDriver();
8080
}
8181

82-
static scene::ISceneManager *get_scene_manager()
82+
scene::ISceneManager *get_scene_manager()
8383
{
84-
sanity_check(s_singleton && s_singleton->m_device);
85-
return s_singleton->m_device->getSceneManager();
84+
return m_device->getSceneManager();
8685
}
8786

8887
static irr::IrrlichtDevice *get_raw_device()

‎src/client/wieldmesh.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,8 @@ static scene::SMesh *createSpecialNodeMesh(Client *client, MapNode n,
307307
MeshMakeData mesh_make_data(client, false);
308308
MeshCollector collector;
309309
mesh_make_data.setSmoothLighting(false);
310-
MapblockMeshGenerator gen(&mesh_make_data, &collector);
310+
MapblockMeshGenerator gen(&mesh_make_data, &collector,
311+
client->getSceneManager()->getMeshManipulator());
311312

312313
if (n.getParam2()) {
313314
// keep it
@@ -538,7 +539,7 @@ void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result)
538539
content_t id = ndef->getId(def.name);
539540

540541
FATAL_ERROR_IF(!g_extrusion_mesh_cache, "Extrusion mesh cache is not yet initialized");
541-
542+
542543
scene::SMesh *mesh = nullptr;
543544

544545
// Shading is on by default

‎src/gui/guiFormSpecMenu.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2794,7 +2794,7 @@ void GUIFormSpecMenu::parseModel(parserData *data, const std::string &element)
27942794

27952795
core::rect<s32> rect(pos, pos + geom);
27962796

2797-
GUIScene *e = new GUIScene(Environment, RenderingEngine::get_scene_manager(),
2797+
GUIScene *e = new GUIScene(Environment, m_client->getSceneManager(),
27982798
data->current_parent, rect, spec.fid);
27992799

28002800
auto meshnode = e->setMesh(mesh);

‎src/nodedef.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1446,8 +1446,8 @@ void NodeDefManager::updateTextures(IGameDef *gamedef,
14461446
Client *client = (Client *)gamedef;
14471447
ITextureSource *tsrc = client->tsrc();
14481448
IShaderSource *shdsrc = client->getShaderSource();
1449-
scene::IMeshManipulator *meshmanip =
1450-
RenderingEngine::get_scene_manager()->getMeshManipulator();
1449+
auto smgr = client->getSceneManager();
1450+
scene::IMeshManipulator *meshmanip = smgr->getMeshManipulator();
14511451
TextureSettings tsettings;
14521452
tsettings.readSettings();
14531453

0 commit comments

Comments
 (0)
Please sign in to comment.