/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include #include #include #include #include #include #include namespace AZ { namespace Render { MorphTargetInputBuffers::MorphTargetInputBuffers(const RPI::BufferAssetView& bufferAssetView, const AZStd::string& bufferNamePrefix) { m_vertexDeltaBuffer = RPI::Buffer::FindOrCreate(bufferAssetView.GetBufferAsset()); if (m_vertexDeltaBuffer) { 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; } } void MorphTargetInputBuffers::SetBufferViewsOnShaderResourceGroup(const Data::Instance& perInstanceSRG) { // Set the delta buffer RHI::ShaderInputBufferIndex srgIndex = perInstanceSRG->FindShaderInputBufferIndex(Name{ "m_vertexDeltas" }); AZ_Error("MorphTargetInputBuffers", srgIndex.IsValid(), "Failed to find shader input index for 'm_positionDeltas' in the skinning compute shader per-instance SRG."); [[maybe_unused]] bool success = perInstanceSRG->SetBufferView(srgIndex, m_vertexDeltaBufferView.get()); AZ_Error("MorphTargetInputBuffers", success, "Failed to bind buffer view for vertex deltas"); } } // namespace Render }// namespace AZ