diff --git a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/MorphTargets/MorphTargetInputBuffers.h b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/MorphTargets/MorphTargetInputBuffers.h index 56ecd7de4d..8bef9ea427 100644 --- a/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/MorphTargets/MorphTargetInputBuffers.h +++ b/Gems/Atom/Feature/Common/Code/Include/Atom/Feature/MorphTargets/MorphTargetInputBuffers.h @@ -53,6 +53,7 @@ namespace AZ void SetBufferViewsOnShaderResourceGroup(const Data::Instance& perInstanceSRG); private: RHI::Ptr m_vertexDeltaBufferView; + Data::Instance m_vertexDeltaBuffer; }; struct MorphTargetMetaData diff --git a/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetInputBuffers.cpp b/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetInputBuffers.cpp index 35437f2b1e..e6fa8bb54e 100644 --- a/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetInputBuffers.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/MorphTargets/MorphTargetInputBuffers.cpp @@ -30,16 +30,18 @@ namespace AZ { MorphTargetInputBuffers::MorphTargetInputBuffers(const RPI::BufferAssetView& bufferAssetView, const AZStd::string& bufferNamePrefix) { - auto buffer = RPI::Buffer::FindOrCreate(bufferAssetView.GetBufferAsset()); - - AZ::RHI::Ptr bufferView = RHI::Factory::Get().CreateBufferView(); + m_vertexDeltaBuffer = RPI::Buffer::FindOrCreate(bufferAssetView.GetBufferAsset()); + if (m_vertexDeltaBuffer) { - bufferView->SetName(Name(bufferNamePrefix + "MorphTargetVertexDeltaView")); - [[maybe_unused]] RHI::ResultCode resultCode = bufferView->Init(*buffer->GetRHIBuffer(), bufferAssetView.GetBufferViewDescriptor()); - AZ_Error("MorphTargetInputBuffers", resultCode == RHI::ResultCode::Success, "Failed to initialize buffer view for morph target."); + AZ::RHI::Ptr bufferView = RHI::Factory::Get().CreateBufferView(); + { + bufferView->SetName(Name(bufferNamePrefix + "MorphTargetVertexDeltaView")); + [[maybe_unused]] RHI::ResultCode resultCode = bufferView->Init(*m_vertexDeltaBuffer->GetRHIBuffer(), bufferAssetView.GetBufferViewDescriptor()); + AZ_Error("MorphTargetInputBuffers", resultCode == RHI::ResultCode::Success, "Failed to initialize buffer view for morph target."); + } + + m_vertexDeltaBufferView = bufferView; } - - m_vertexDeltaBufferView = bufferView; } void MorphTargetInputBuffers::SetBufferViewsOnShaderResourceGroup(const Data::Instance& perInstanceSRG)