Simplify particle texture loading
This commit is contained in:
parent
63f57d6a9c
commit
c98e4f2bac
@ -62,7 +62,6 @@ Material::Material(const XMLNode *node, bool deprecated)
|
|||||||
m_shader_type = SHADERTYPE_SOLID;
|
m_shader_type = SHADERTYPE_SOLID;
|
||||||
m_deprecated = deprecated;
|
m_deprecated = deprecated;
|
||||||
m_installed = false;
|
m_installed = false;
|
||||||
m_srgb_texture = true;
|
|
||||||
|
|
||||||
node->get("name", &m_texname);
|
node->get("name", &m_texname);
|
||||||
if (m_texname=="")
|
if (m_texname=="")
|
||||||
@ -402,11 +401,11 @@ Material::Material(const XMLNode *node, bool deprecated)
|
|||||||
m_high_tire_adhesion = true;
|
m_high_tire_adhesion = true;
|
||||||
} // Material
|
} // Material
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
video::ITexture* Material::getTexture()
|
video::ITexture* Material::getTexture(bool srgb, bool premul_alpha)
|
||||||
{
|
{
|
||||||
if (!m_installed)
|
if (!m_installed)
|
||||||
{
|
{
|
||||||
install();
|
install(srgb, premul_alpha);
|
||||||
}
|
}
|
||||||
return m_texture;
|
return m_texture;
|
||||||
} // getTexture
|
} // getTexture
|
||||||
@ -417,12 +416,10 @@ video::ITexture* Material::getTexture()
|
|||||||
* \param is_full_path If the fname contains the full path.
|
* \param is_full_path If the fname contains the full path.
|
||||||
*/
|
*/
|
||||||
Material::Material(const std::string& fname, bool is_full_path,
|
Material::Material(const std::string& fname, bool is_full_path,
|
||||||
bool complain_if_not_found, bool load_texture,
|
bool complain_if_not_found, bool load_texture)
|
||||||
bool srgb)
|
|
||||||
{
|
{
|
||||||
m_deprecated = false;
|
m_deprecated = false;
|
||||||
m_installed = false;
|
m_installed = false;
|
||||||
m_srgb_texture = srgb;
|
|
||||||
init();
|
init();
|
||||||
|
|
||||||
if (is_full_path)
|
if (is_full_path)
|
||||||
@ -493,30 +490,30 @@ void Material::init()
|
|||||||
} // init
|
} // init
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void Material::install()
|
void Material::install(bool srgb, bool premul_alpha)
|
||||||
{
|
{
|
||||||
// Don't load a texture that are not supposed to be loaded automatically
|
// Don't load a texture that are not supposed to be loaded automatically
|
||||||
if (m_installed) return;
|
if (m_installed) return;
|
||||||
|
|
||||||
m_installed = true;
|
m_installed = true;
|
||||||
|
|
||||||
if (m_complain_if_not_found && m_full_path.size() == 0)
|
if (StringUtils::getPath(m_full_path).empty())
|
||||||
{
|
{
|
||||||
Log::error("material", "Cannot find texture '%s'.", m_texname.c_str());
|
if (m_complain_if_not_found)
|
||||||
|
{
|
||||||
|
Log::error("material", "Cannot find texture '%s'.",
|
||||||
|
m_texname.c_str());
|
||||||
|
}
|
||||||
m_texture = NULL;
|
m_texture = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
#ifndef SERVER_ONLY
|
#ifndef SERVER_ONLY
|
||||||
if (CVS->isGLSL())
|
if (CVS->isGLSL())
|
||||||
{
|
{
|
||||||
m_texture = STKTexManager::getInstance()->getTexture
|
m_texture = STKTexManager::getInstance()->getTexture
|
||||||
(m_full_path, m_srgb_texture,
|
(m_full_path, srgb, premul_alpha, false/*set_material*/,
|
||||||
m_shader_type == SHADERTYPE_ALPHA_BLEND ||
|
srgb/*mesh_tex*/);
|
||||||
m_shader_type == SHADERTYPE_ADDITIVE ?
|
|
||||||
true : false/*premul_alpha*/,
|
|
||||||
false/*set_material*/, m_srgb_texture/*mesh_tex*/);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -266,11 +266,8 @@ private:
|
|||||||
|
|
||||||
bool m_installed;
|
bool m_installed;
|
||||||
|
|
||||||
/** If Layer 1 texture is srgb. */
|
|
||||||
bool m_srgb_texture;
|
|
||||||
|
|
||||||
void init ();
|
void init ();
|
||||||
void install ();
|
void install (bool srgb = false, bool premul_alpha = false);
|
||||||
void initCustomSFX(const XMLNode *sfx);
|
void initCustomSFX(const XMLNode *sfx);
|
||||||
void initParticlesEffect(const XMLNode *node);
|
void initParticlesEffect(const XMLNode *node);
|
||||||
|
|
||||||
@ -279,8 +276,7 @@ public:
|
|||||||
Material(const std::string& fname,
|
Material(const std::string& fname,
|
||||||
bool is_full_path=false,
|
bool is_full_path=false,
|
||||||
bool complain_if_not_found=true,
|
bool complain_if_not_found=true,
|
||||||
bool load_texture = true,
|
bool load_texture = true);
|
||||||
bool srgb = false);
|
|
||||||
~Material ();
|
~Material ();
|
||||||
|
|
||||||
void unloadTexture();
|
void unloadTexture();
|
||||||
@ -294,7 +290,7 @@ public:
|
|||||||
void isInitiallyHidden(scene::IMeshBuffer* who);
|
void isInitiallyHidden(scene::IMeshBuffer* who);
|
||||||
|
|
||||||
/** Returns the ITexture associated with this material. */
|
/** Returns the ITexture associated with this material. */
|
||||||
video::ITexture *getTexture();
|
video::ITexture *getTexture(bool srgb = true, bool premul_alpha = false);
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
bool isIgnore () const { return m_ignore; }
|
bool isIgnore () const { return m_ignore; }
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
@ -335,8 +335,7 @@ Material *MaterialManager::getMaterial(const std::string& fname,
|
|||||||
bool is_full_path,
|
bool is_full_path,
|
||||||
bool make_permanent,
|
bool make_permanent,
|
||||||
bool complain_if_not_found,
|
bool complain_if_not_found,
|
||||||
bool strip_path,
|
bool strip_path)
|
||||||
bool srgb)
|
|
||||||
{
|
{
|
||||||
if(fname=="")
|
if(fname=="")
|
||||||
{
|
{
|
||||||
|
@ -76,8 +76,7 @@ public:
|
|||||||
bool is_full_path=false,
|
bool is_full_path=false,
|
||||||
bool make_permanent=false,
|
bool make_permanent=false,
|
||||||
bool complain_if_not_found=true,
|
bool complain_if_not_found=true,
|
||||||
bool strip_path=true,
|
bool strip_path=true);
|
||||||
bool srgb=false);
|
|
||||||
void addSharedMaterial(const std::string& filename, bool deprecated = false);
|
void addSharedMaterial(const std::string& filename, bool deprecated = false);
|
||||||
bool pushTempMaterial (const std::string& filename, bool deprecated = false);
|
bool pushTempMaterial (const std::string& filename, bool deprecated = false);
|
||||||
bool pushTempMaterial (const XMLNode *root, const std::string& filename, bool deprecated = false);
|
bool pushTempMaterial (const XMLNode *root, const std::string& filename, bool deprecated = false);
|
||||||
|
@ -257,7 +257,7 @@ Material* ParticleKind::getMaterial() const
|
|||||||
if (material_manager->hasMaterial(m_material_file))
|
if (material_manager->hasMaterial(m_material_file))
|
||||||
{
|
{
|
||||||
Material* material = material_manager->getMaterial(m_material_file);
|
Material* material = material_manager->getMaterial(m_material_file);
|
||||||
if (material->getTexture() == NULL)
|
if (material->getTexture(true/*srgb*/, true/*premul_alpha*/) == NULL)
|
||||||
{
|
{
|
||||||
throw std::runtime_error("[ParticleKind] Cannot locate file " + m_material_file);
|
throw std::runtime_error("[ParticleKind] Cannot locate file " + m_material_file);
|
||||||
}
|
}
|
||||||
|
@ -108,10 +108,12 @@ void STKTexManager::addTexture(STKTexture* t)
|
|||||||
} // addTexture
|
} // addTexture
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
void STKTexManager::dumpAllTexture()
|
void STKTexManager::dumpAllTexture(bool mesh_texture)
|
||||||
{
|
{
|
||||||
for (auto p : m_all_textures)
|
for (auto p : m_all_textures)
|
||||||
{
|
{
|
||||||
|
if (!p.second || (mesh_texture && !p.second->isMeshTexture()))
|
||||||
|
continue;
|
||||||
Log::info("STKTexManager", "%s loc: %p", p.first.c_str(), p.second);
|
Log::info("STKTexManager", "%s loc: %p", p.first.c_str(), p.second);
|
||||||
}
|
}
|
||||||
} // dumpAllTexture
|
} // dumpAllTexture
|
||||||
|
@ -53,7 +53,7 @@ public:
|
|||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
void removeTexture(STKTexture* t);
|
void removeTexture(STKTexture* t);
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
void dumpAllTexture();
|
void dumpAllTexture(bool mesh_texture);
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
int dumpTextureUsage();
|
int dumpTextureUsage();
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user