585 {
586 Logger::Get().
Log(
"Changing texture", __FILE__, __LINE__, Logger::LogLevel::Initialize);
587
588 HRESULT result;
589 ID3D11ShaderResourceView* newTexture = nullptr;
590
591
592 result = DirectX::CreateWICTextureFromFile(device, deviceContext, filename.c_str(), nullptr, &newTexture);
593 if (FAILED(result)) {
594 Logger::Get().
Log(
"Failed to load texture: " + std::string(filename.begin(), filename.end()), __FILE__, __LINE__, Logger::LogLevel::Error);
595 return false;
596 }
597
598
599 auto& textureVector = m_Textures.Get(type);
600
601
602 if (index >= textureVector.size()) {
603 textureVector.resize(index + 1, nullptr);
604 }
605
606
607 if (textureVector[index]) {
608 textureVector[index]->Release();
609 }
610
611
612 textureVector[index] = newTexture;
613
614
615 switch (type) {
616 case TextureType::Diffuse:
617 if (index >= m_Textures.diffusePaths.size()) {
618 m_Textures.diffusePaths.resize(index + 1, L"");
619 }
620 m_Textures.diffusePaths[index] = filename;
621 break;
622 case TextureType::Normal:
623 if (index >= m_Textures.normalPaths.size()) {
624 m_Textures.normalPaths.resize(index + 1, L"");
625 }
626 m_Textures.normalPaths[index] = filename;
627 break;
628 case TextureType::Specular:
629 if (index >= m_Textures.specularPaths.size()) {
630 m_Textures.specularPaths.resize(index + 1, L"");
631 }
632 m_Textures.specularPaths[index] = filename;
633 break;
634 case TextureType::Alpha:
635 if (index >= m_Textures.alphaPaths.size()) {
636 m_Textures.alphaPaths.resize(index + 1, L"");
637 }
638 m_Textures.alphaPaths[index] = filename;
639 break;
640 }
641
642 Logger::Get().
Log(
"Texture changed successfully", __FILE__, __LINE__, Logger::LogLevel::Initialize);
643 return true;
644}