Skip to content
Permalink
Browse files

Avoid unnecessary copies during media/mesh loading

  • Loading branch information
sfan5 committed Mar 12, 2021
1 parent cff35cf commit 1bc85a47cb794a4a23cd8a2a1142aa20c1c1cfae
Showing with 11 additions and 3 deletions.
  1. +11 −3 src/client/client.cpp
@@ -663,12 +663,15 @@ bool Client::loadMedia(const std::string &data, const std::string &filename,
io::IFileSystem *irrfs = RenderingEngine::get_filesystem();
video::IVideoDriver *vdrv = RenderingEngine::get_video_driver();

#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
io::IReadFile *rfile = irrfs->createMemoryReadFile(
data.c_str(), data.size(), "_tempreadfile");
#else
// Silly irrlicht's const-incorrectness
Buffer<char> data_rw(data.c_str(), data.size());

// Create an irrlicht memory file
io::IReadFile *rfile = irrfs->createMemoryReadFile(
*data_rw, data_rw.getSize(), "_tempreadfile");
#endif

FATAL_ERROR_IF(!rfile, "Could not create irrlicht memory file.");

@@ -1914,9 +1917,14 @@ scene::IAnimatedMesh* Client::getMesh(const std::string &filename, bool cache)

// Create the mesh, remove it from cache and return it
// This allows unique vertex colors and other properties for each instance
#if IRRLICHT_VERSION_MAJOR == 1 && IRRLICHT_VERSION_MINOR > 8
io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile(
data.c_str(), data.size(), filename.c_str());
#else
Buffer<char> data_rw(data.c_str(), data.size()); // Const-incorrect Irrlicht
io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile(
io::IReadFile *rfile = RenderingEngine::get_filesystem()->createMemoryReadFile(
*data_rw, data_rw.getSize(), filename.c_str());
#endif
FATAL_ERROR_IF(!rfile, "Could not create/open RAM file");

scene::IAnimatedMesh *mesh = RenderingEngine::get_scene_manager()->getMesh(rfile);

0 comments on commit 1bc85a4

Please sign in to comment.