diff --git a/src/graphics/b3d_mesh_loader.cpp b/src/graphics/b3d_mesh_loader.cpp index 58c3e801c..3fbd26f97 100644 --- a/src/graphics/b3d_mesh_loader.cpp +++ b/src/graphics/b3d_mesh_loader.cpp @@ -1326,10 +1326,8 @@ void B3DMeshLoader::loadTextures(SB3dMaterial& material, scene::IMeshBuffer* mb) else #endif { - TexConfig mtc(i <= 1 ? true : false/*srgb*/, false/*premul_alpha*/, - true/*mesh_tex*/, true/*set_material*/); video::ITexture* tex = STKTexManager::getInstance()->getTexture - (full_path.c_str(), &mtc); + (full_path.c_str()); material.Material.setTexture(i, tex); } if (material.Textures[i]->Flags & 0x10) // Clamp U diff --git a/src/graphics/irr_driver.cpp b/src/graphics/irr_driver.cpp index d41c490b7..721ce2aba 100644 --- a/src/graphics/irr_driver.cpp +++ b/src/graphics/irr_driver.cpp @@ -1637,33 +1637,19 @@ void IrrDriver::removeCameraSceneNode(scene::ICameraSceneNode *camera) * getTexture() function.s * \param type The FileManager::AssetType of the texture. * \param filename File name of the texture to load. - * \param is_premul If the alpha values needd to be multiplied for - * all pixels. - * \param is_prediv If the alpha value needs to be divided into - * each pixel. */ video::ITexture *IrrDriver::getTexture(FileManager::AssetType type, - const std::string &filename, - bool is_premul, - bool is_prediv, - bool complain_if_not_found) + const std::string &filename) { const std::string path = file_manager->getAsset(type, filename); - return getTexture(path, is_premul, is_prediv, complain_if_not_found); + return getTexture(path); } // getTexture // ---------------------------------------------------------------------------- /** Loads a texture from a file and returns the texture object. * \param filename File name of the texture to load. - * \param is_premul If the alpha values needd to be multiplied for - * all pixels. - * \param is_prediv If the alpha value needs to be divided into - * each pixel. */ -video::ITexture *IrrDriver::getTexture(const std::string &filename, - bool is_premul, - bool is_prediv, - bool complain_if_not_found) +video::ITexture *IrrDriver::getTexture(const std::string &filename) { return STKTexManager::getInstance()->getTexture(filename); } // getTexture diff --git a/src/graphics/irr_driver.hpp b/src/graphics/irr_driver.hpp index 283098d0b..eb1ba6092 100644 --- a/src/graphics/irr_driver.hpp +++ b/src/graphics/irr_driver.hpp @@ -218,14 +218,8 @@ public: void setAmbientLight(const video::SColorf &light, bool force_SH_computation = true); video::ITexture *getTexture(FileManager::AssetType type, - const std::string &filename, - bool is_premul=false, - bool is_prediv=false, - bool complain_if_not_found=true); - video::ITexture *getTexture(const std::string &filename, - bool is_premul=false, - bool is_prediv=false, - bool complain_if_not_found=true); + const std::string &filename); + video::ITexture *getTexture(const std::string &filename); void grabAllTextures(const scene::IMesh *mesh); void dropAllTextures(const scene::IMesh *mesh); scene::IMesh *createQuadMesh(const video::SMaterial *material=NULL, diff --git a/src/graphics/material.cpp b/src/graphics/material.cpp index c46752d4f..df75f9726 100644 --- a/src/graphics/material.cpp +++ b/src/graphics/material.cpp @@ -500,9 +500,7 @@ void Material::install(bool srgb, bool premul_alpha) } else { - TexConfig tc(srgb, premul_alpha, srgb/*mesh_tex*/); - m_texture = STKTexManager::getInstance() - ->getTexture(m_sampler_path[0], &tc); + m_texture = STKTexManager::getInstance()->getTexture(m_sampler_path[0]); } if (m_texture == NULL) return; diff --git a/src/graphics/stk_tex_manager.cpp b/src/graphics/stk_tex_manager.cpp index e9093bd28..2005c949b 100644 --- a/src/graphics/stk_tex_manager.cpp +++ b/src/graphics/stk_tex_manager.cpp @@ -58,9 +58,7 @@ STKTexture* STKTexManager::findTextureInFileSystem(const std::string& filename, } // findTextureInFileSystem // ---------------------------------------------------------------------------- -video::ITexture* STKTexManager::getTexture(const std::string& path, - TexConfig* tc, bool no_upload, - bool create_if_unfound) +video::ITexture* STKTexManager::getTexture(const std::string& path) { if (path.empty()) { @@ -69,7 +67,7 @@ video::ITexture* STKTexManager::getTexture(const std::string& path, } auto ret = m_all_textures.find(path); - if (!no_upload && ret != m_all_textures.end()) + if (ret != m_all_textures.end()) return ret->second; STKTexture* new_texture = NULL; @@ -79,32 +77,27 @@ video::ITexture* STKTexManager::getTexture(const std::string& path, new_texture = findTextureInFileSystem(path, &full_path); if (full_path.empty()) return NULL; - if (!no_upload && new_texture) + if (new_texture) return new_texture; } - if (create_if_unfound) + new_texture = new STKTexture(full_path.empty() ? path : full_path, NULL); + if (new_texture->getTextureHandler() == 0) { - new_texture = new STKTexture(full_path.empty() ? path : full_path, - tc, no_upload); - if (new_texture->getTextureHandler() == 0 && !no_upload) + const char* name = new_texture->getName().getPtr(); + if (!m_texture_error_message.empty()) { - const char* name = new_texture->getName().getPtr(); - if (!m_texture_error_message.empty()) - { - Log::error("STKTexManager", "%s", - m_texture_error_message.c_str()); - } - Log::error("STKTexManager", "Texture %s not found or invalid.", - name); - m_all_textures[name] = NULL; - delete new_texture; - return NULL; + Log::error("STKTexManager", "%s", + m_texture_error_message.c_str()); } + Log::error("STKTexManager", "Texture %s not found or invalid.", + name); + m_all_textures[name] = NULL; + delete new_texture; + return NULL; } - if (create_if_unfound && !no_upload) - addTexture(new_texture); + addTexture(new_texture); return new_texture; } // getTexture @@ -183,3 +176,29 @@ int STKTexManager::dumpTextureUsage() Log::info("STKTexManager", "Total %dMB", size); return size; } // dumpTextureUsage + +// ---------------------------------------------------------------------------- +bool STKTexManager::hasTexture(const std::string& path) +{ + if (path.empty()) + { + Log::error("STKTexManager", "Texture name is empty."); + return false; + } + + auto ret = m_all_textures.find(path); + if (ret != m_all_textures.end()) + return true; + + video::ITexture* new_texture = NULL; + std::string full_path; + if (path.find('/') == std::string::npos) + { + new_texture = findTextureInFileSystem(path, &full_path); + if (full_path.empty()) + return false; + if (new_texture) + return true; + } + return false; +} // hasTexture diff --git a/src/graphics/stk_tex_manager.hpp b/src/graphics/stk_tex_manager.hpp index ebad439b7..e51805d3b 100644 --- a/src/graphics/stk_tex_manager.hpp +++ b/src/graphics/stk_tex_manager.hpp @@ -74,13 +74,12 @@ public: // ------------------------------------------------------------------------ ~STKTexManager(); // ------------------------------------------------------------------------ - irr::video::ITexture* getTexture(const std::string& path, - TexConfig* tc = NULL, - bool no_upload = false, - bool create_if_unfound = true); + irr::video::ITexture* getTexture(const std::string& path); // ------------------------------------------------------------------------ irr::video::ITexture* addTexture(STKTexture* texture); // ------------------------------------------------------------------------ + bool hasTexture(const std::string& path); + // ------------------------------------------------------------------------ void removeTexture(STKTexture* texture, bool remove_all = false); // ------------------------------------------------------------------------ int dumpTextureUsage(); diff --git a/src/guiengine/widgets/icon_button_widget.cpp b/src/guiengine/widgets/icon_button_widget.cpp index 73a1f87db..0f9954998 100644 --- a/src/guiengine/widgets/icon_button_widget.cpp +++ b/src/guiengine/widgets/icon_button_widget.cpp @@ -374,9 +374,7 @@ video::ITexture* IconButtonWidget::getDeactivatedTexture(video::ITexture* textur std::string name = stk_tex->getName().getPtr(); name += "_disabled"; STKTexManager* stkm = STKTexManager::getInstance(); - STKTexture* disabled_stk_tex = static_cast(stkm->getTexture - (name, NULL/*tc*/, false /*no_upload*/, false/*create_if_unfound*/)); - if (disabled_stk_tex == NULL) + if (!stkm->hasTexture(name)) { SColor c; u32 g; @@ -400,7 +398,7 @@ video::ITexture* IconButtonWidget::getDeactivatedTexture(video::ITexture* textur } return stkm->addTexture(new STKTexture(image, name)); } - return disabled_stk_tex; + return stkm->getTexture(name); #else return texture; #endif // !SERVER_ONLY