Exemplo n.º 1
0
//-----------------------------------------------------------------------------
Material* MaterialManager::getMaterialFor(video::ITexture* t,
    video::E_MATERIAL_TYPE material_type)
{
    if (t == NULL)
        return getDefaultSPMaterial("solid");

    Material* m = getMaterialFor(t);
    if (m != NULL)
        return m;

    return getDefaultSPMaterial("solid");
}
//-----------------------------------------------------------------------------
Material* MaterialManager::getMaterialSPM(std::string lay_one_tex_lc,
                                          std::string lay_two_tex_lc,
                                          const std::string& def_shader_name)
{
    std::string orignal_layer_one = lay_one_tex_lc;
    core::stringc lc(lay_one_tex_lc.c_str());
    lc.make_lower();
    lay_one_tex_lc = lc.c_str();
    lc = lay_two_tex_lc.c_str();
    lc.make_lower();
    lay_two_tex_lc = lc.c_str();
    if (!lay_one_tex_lc.empty() &&
        (lay_one_tex_lc.find('/') != std::string::npos ||
        lay_one_tex_lc.find('\\') != std::string::npos))
    {
        // Search backward so that temporary (track) textures are found first
        for (int i = (int)m_materials.size() - 1; i >= 0; i--)
        {
            if (m_materials[i]->getTexFullPath() == lay_one_tex_lc)
            {
                const std::string& mat_lay_two = m_materials[i]->getUVTwoTexture();
                if (mat_lay_two.empty() && lay_two_tex_lc.empty())
                {
                    return m_materials[i];
                }
                else if (!mat_lay_two.empty() && !lay_two_tex_lc.empty())
                {
                    if (mat_lay_two == lay_two_tex_lc)
                    {
                        return m_materials[i];
                    }
                }
            }
        }
    }
    else if (!lay_one_tex_lc.empty())
    {
        for (int i = (int)m_materials.size() - 1; i >= 0; i--)
        {
            if (m_materials[i]->getTexFname() == lay_one_tex_lc)
            {
                const std::string& mat_lay_two = m_materials[i]->getUVTwoTexture();
                if (mat_lay_two.empty() && lay_two_tex_lc.empty())
                {
                    return m_materials[i];
                }
                else if (!mat_lay_two.empty() && !lay_two_tex_lc.empty())
                {
                    if (mat_lay_two == lay_two_tex_lc)
                    {
                        return m_materials[i];
                    }
                }
            }
        }   // for i
    }
    return getDefaultSPMaterial(def_shader_name,
        StringUtils::getBasename(orignal_layer_one));
}