Showing with 335 additions and 206 deletions.
  1. +7 −0 minetest.conf.example
  2. +1 −1 src/camera.cpp
  3. +21 −12 src/client.cpp
  4. +2 −2 src/content_cao.cpp
  5. +1 −0 src/defaultsettings.cpp
  6. +4 −3 src/game.cpp
  7. +1 −1 src/guiFormSpecMenu.cpp
  8. +268 −172 src/itemdef.cpp
  9. +19 −15 src/itemdef.h
  10. +11 −0 src/util/container.h
7 changes: 7 additions & 0 deletions minetest.conf.example
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,13 @@
#sound_volume = 0.7
# Whether node texture animations should be desynchronized per MapBlock
#desynchronize_mapblock_texture_animation = true
# Texture filtering settings
#mip_map = false
#anisotropic_filter = false
#bilinear_filter = false
#trilinear_filter = false
# Set to false to pre-generate all item visuals
#enable_on_demand_item_visuals = true

#
# Server stuff
Expand Down
2 changes: 1 addition & 1 deletion src/camera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,7 @@ void Camera::setDigging(s32 button)
void Camera::wield(const ItemStack &item)
{
IItemDefManager *idef = m_gamedef->idef();
scene::IMesh *wield_mesh = item.getDefinition(idef).wield_mesh;
scene::IMesh *wield_mesh = idef->getWieldMesh(item.getDefinition(idef).name, m_gamedef);
if(wield_mesh)
{
m_wieldnode->setMesh(wield_mesh);
Expand Down
33 changes: 21 additions & 12 deletions src/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1468,8 +1468,8 @@ void Client::ProcessData(u8 *data, u32 datasize, u16 sender_peer_id)

int num_files = readU16(is);

verbosestream<<"Client received TOCLIENT_ANNOUNCE_MEDIA ("
<<num_files<<" files)"<<std::endl;
infostream<<"Client: Received media announcement: packet size: "
<<datasize<<std::endl;

core::list<MediaRequest> file_requests;

Expand Down Expand Up @@ -2438,7 +2438,7 @@ ClientEvent Client::getClientEvent()

void Client::afterContentReceived()
{
verbosestream<<"Client::afterContentReceived() started"<<std::endl;
infostream<<"Client::afterContentReceived() started"<<std::endl;
assert(m_itemdef_received);
assert(m_nodedef_received);
assert(m_media_received);
Expand All @@ -2448,31 +2448,40 @@ void Client::afterContentReceived()
m_media_name_sha1_map.clear();

// Rebuild inherited images and recreate textures
verbosestream<<"Rebuilding images and textures"<<std::endl;
infostream<<"- Rebuilding images and textures"<<std::endl;
m_tsrc->rebuildImagesAndTextures();

// Update texture atlas
verbosestream<<"Updating texture atlas"<<std::endl;
infostream<<"- Updating texture atlas"<<std::endl;
if(g_settings->getBool("enable_texture_atlas"))
m_tsrc->buildMainAtlas(this);

// Update node aliases
verbosestream<<"Updating node aliases"<<std::endl;
infostream<<"- Updating node aliases"<<std::endl;
m_nodedef->updateAliases(m_itemdef);

// Update node textures
verbosestream<<"Updating node textures"<<std::endl;
infostream<<"- Updating node textures"<<std::endl;
m_nodedef->updateTextures(m_tsrc);

// Update item textures and meshes
verbosestream<<"Updating item textures and meshes"<<std::endl;
m_itemdef->updateTexturesAndMeshes(this);
// Update item textures and meshes if configured to
if(g_settings->getBool("enable_on_demand_item_visuals") == false)
{
verbosestream<<"Updating item textures and meshes"<<std::endl;
std::set<std::string> names = m_itemdef->getAll();
for(std::set<std::string>::const_iterator
i = names.begin(); i != names.end(); ++i){
// Asking for these caches the result
m_itemdef->getInventoryTexture(*i, this);
m_itemdef->getWieldMesh(*i, this);
}
}

// Start mesh update thread after setting up content definitions
verbosestream<<"Starting mesh update thread"<<std::endl;
infostream<<"- Starting mesh update thread"<<std::endl;
m_mesh_update_thread.Start();

verbosestream<<"Client::afterContentReceived() done"<<std::endl;
infostream<<"Client::afterContentReceived() done"<<std::endl;
}

float Client::getRTT(void)
Expand Down
4 changes: 2 additions & 2 deletions src/content_cao.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ void ItemCAO::updateTexture()
IItemDefManager *idef = m_gamedef->idef();
ItemStack item;
item.deSerialize(is, idef);
texture = item.getDefinition(idef).inventory_texture;
texture = idef->getInventoryTexture(item.getDefinition(idef).name, m_gamedef);
}
catch(SerializationError &e)
{
Expand Down Expand Up @@ -957,7 +957,7 @@ class GenericCAO : public ClientActiveObject
infostream<<"textures[0]: "<<m_prop.textures[0]<<std::endl;
IItemDefManager *idef = m_gamedef->idef();
ItemStack item(m_prop.textures[0], 1, 0, "", idef);
scene::IMesh *item_mesh = item.getDefinition(idef).wield_mesh;
scene::IMesh *item_mesh = idef->getWieldMesh(item.getDefinition(idef).name, m_gamedef);

// Copy mesh to be able to set unique vertex colors
scene::IMeshManipulator *manip =
Expand Down
1 change: 1 addition & 0 deletions src/defaultsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ void set_default_settings(Settings *settings)
settings->setDefault("anisotropic_filter", "false");
settings->setDefault("bilinear_filter", "false");
settings->setDefault("trilinear_filter", "false");
settings->setDefault("enable_on_demand_item_visuals", "true");

// Server stuff
// "map-dir" doesn't exist by default.
Expand Down
7 changes: 4 additions & 3 deletions src/game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1416,11 +1416,12 @@ void the_game(
g_gamecallback->changepassword_requested = false;
}

/*
Process TextureSource's queue
*/
/* Process TextureSource's queue */
tsrc->processQueue();

/* Process ItemDefManager's queue */
itemdef->processQueue(gamedef);

/*
Random calculations
*/
Expand Down
2 changes: 1 addition & 1 deletion src/guiFormSpecMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ void drawItemStack(video::IVideoDriver *driver,
return;

const ItemDefinition &def = item.getDefinition(gamedef->idef());
video::ITexture *texture = def.inventory_texture;
video::ITexture *texture = gamedef->idef()->getInventoryTexture(def.name, gamedef);

// Draw the inventory texture
if(texture != NULL)
Expand Down
Loading