//=============================================================================================================================== void TextureManager::WriteToFile(BetterString filename, BetterString textureName) { // Locate the texture map<string, ID3D11ShaderResourceView*>::iterator iter = m_pTextures.find(textureName.toString()); if (iter != m_pTextures.end()) { WriteToFile(filename, (*iter).second); } }
//=============================================================================================================================== bool TextureManager::Exists(BetterString filename, D3D_VERSION d3d) { if (d3d == DIRECTX10) { //map< string, ID3D10ShaderResourceView* >::iterator texture_it = m_pTextures.find(filename.toString()); //if (texture_it != m_pTextureData.end()) // return true; //else // return false; } else if (d3d == DIRECTX11) { map< string, ID3D11ShaderResourceView* >::iterator texture_it = m_pTextures.find(filename.toString()); if (texture_it != m_pTextures.end()) return true; else return false; } return false; }
//=============================================================================================================================== void FBXLoader::LoadMaterialTexture(FbxSurfaceMaterial* inMaterial, ZShadeSandboxLighting::ShaderMaterial*& ioMaterial) { uint32 textureIndex = 0; FbxProperty property; FBXSDK_FOR_EACH_TEXTURE(textureIndex) { property = inMaterial->FindProperty(FbxLayerElement::sTextureChannelNames[textureIndex]); if (property.IsValid()) { uint32 textureCount = property.GetSrcObjectCount<FbxTexture>(); for (uint32 i = 0; i < textureCount; ++i) { FbxLayeredTexture* layeredTexture = property.GetSrcObject<FbxLayeredTexture>(i); if(layeredTexture) { throw std::exception("Layered Texture is currently unsupported\n"); } else { FbxTexture* texture = property.GetSrcObject<FbxTexture>(i); if (texture) { std::string textureType = property.GetNameAsCStr(); FbxFileTexture* fileTexture = FbxCast<FbxFileTexture>(texture); if (fileTexture) { string str_filename(fileTexture->GetFileName()); std::size_t index = str_filename.find_last_of('/\\'); if (index != string::npos) { BetterString str(fileTexture->GetFileName()); int dot_index = str.get_index('.'); BetterString pathName = str.substring(index + 1, dot_index); BetterString ext = str.substring(dot_index + 1); BetterString filename = pathName + "." + ext; str_filename = filename.toString(); } if (textureType == "DiffuseColor") { ioMaterial->sDiffuseTextureName = str_filename; ioMaterial->bHasDiffuseTexture = true; } else if (textureType == "SpecularColor") { ioMaterial->sSpecularTextureName = str_filename; ioMaterial->bHasSpecularTexture = true; } else if (textureType == "Bump") { ioMaterial->sNormalMapTextureName = str_filename; ioMaterial->bHasNormalMapTexture = true; } } } } } } } ioMaterial->SetD3D(m_pD3DSystem); bool addToMM = false; if (ioMaterial->bHasDiffuseTexture) { ZShadeSandboxLighting::ShaderMaterial* material; if (material = MaterialManager::Instance()->GetMaterial(ioMaterial->sMaterialName)) { // The texture has already been loaded ioMaterial->SetMaterialDiffuseTexture(material->DiffuseTexture()); } else { // Need to load new texture ioMaterial->AddDiffuseTexture(m_pGD3D->m_textures_path, ioMaterial->sDiffuseTextureName); addToMM = true; } } if (ioMaterial->bHasSpecularTexture) { ZShadeSandboxLighting::ShaderMaterial* material; if (material = MaterialManager::Instance()->GetMaterial(ioMaterial->sMaterialName)) { // The texture has already been loaded ioMaterial->SetMaterialSpecularTexture(material->SpecularTexture()); } else { // Need to load new texture ioMaterial->AddDiffuseTexture(m_pGD3D->m_textures_path, ioMaterial->sSpecularTextureName); addToMM = true; } } if (ioMaterial->bHasNormalMapTexture) { ZShadeSandboxLighting::ShaderMaterial* material; if (material = MaterialManager::Instance()->GetMaterial(ioMaterial->sMaterialName)) { // The texture has already been loaded ioMaterial->SetMaterialNormalMapTexture(material->NormalMapTexture()); } else { // Need to load new texture ioMaterial->AddDiffuseTexture(m_pGD3D->m_textures_path, ioMaterial->sNormalMapTextureName); addToMM = true; } } if (addToMM) { MaterialManager::Instance()->Add(ioMaterial); } }