Fixed certain crashes when assigning rig and clip
This commit is contained in:
parent
406759f856
commit
d1ab595126
|
@ -85,8 +85,12 @@ namespace SHADE
|
|||
|
||||
currClip = newClip;
|
||||
secsPerTick = 1.0f / currClip->GetTicksPerSecond();
|
||||
|
||||
if (!rig)
|
||||
{
|
||||
updatePoseWithClip(0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------------*/
|
||||
/* Update Functions */
|
||||
|
@ -94,7 +98,7 @@ namespace SHADE
|
|||
void SHAnimatorComponent::Update(float dt)
|
||||
{
|
||||
// Nothing to animate
|
||||
if (!currClip || !isPlaying)
|
||||
if (!currClip || !isPlaying || !rig)
|
||||
return;
|
||||
|
||||
// Update time on the playback
|
||||
|
|
|
@ -597,7 +597,7 @@ namespace SHADE
|
|||
},
|
||||
[component](AssetID const& id)
|
||||
{
|
||||
if (SHAssetManager::GetType(id) != AssetType::MESH)
|
||||
if (SHAssetManager::GetType(id) != AssetType::MODEL)
|
||||
{
|
||||
SHLOG_WARNING("Attempted to assign non mesh asset to Renderable Mesh property!")
|
||||
return;
|
||||
|
@ -608,7 +608,7 @@ namespace SHADE
|
|||
|
||||
Handle<SHAnimationClip> const& clip = component->GetCurrentClip();
|
||||
const auto CLIP_NAME = rig ? SHResourceManager::GetAssetName<SHAnimationClip>(clip).value_or("") : "";
|
||||
SHEditorWidgets::DragDropReadOnlyField<AssetID>("Material", CLIP_NAME,
|
||||
SHEditorWidgets::DragDropReadOnlyField<AssetID>("Clip", CLIP_NAME,
|
||||
[component]()
|
||||
{
|
||||
Handle<SHAnimationClip> const& clip = component->GetCurrentClip();
|
||||
|
@ -616,7 +616,7 @@ namespace SHADE
|
|||
},
|
||||
[component](AssetID const& id)
|
||||
{
|
||||
if (SHAssetManager::GetType(id) != AssetType::MESH)
|
||||
if (SHAssetManager::GetType(id) != AssetType::MODEL)
|
||||
{
|
||||
SHLOG_WARNING("Attempted to assign non mesh asset to Renderable Mesh property!")
|
||||
return;
|
||||
|
|
|
@ -648,15 +648,19 @@ namespace SHADE
|
|||
using PreDefDescLayoutType = SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes;
|
||||
static constexpr uint32_t MATERIAL_DESC_SET_INDEX = 0;
|
||||
|
||||
// Flags
|
||||
bool descSetUpdateRequired = false;
|
||||
|
||||
/* Create Descriptor Sets if Needed */
|
||||
std::vector<uint32_t> varDescCounts;
|
||||
PreDefDescLayoutType layoutTypes = {};
|
||||
if (matPropsData)
|
||||
{
|
||||
layoutTypes |= PreDefDescLayoutType::MATERIALS;
|
||||
varDescCounts.push_back(0);
|
||||
}
|
||||
if (!boneMatrixData.empty())
|
||||
{
|
||||
layoutTypes |= PreDefDescLayoutType::BONES;
|
||||
varDescCounts.push_back(0);
|
||||
}
|
||||
|
||||
if (matPropsData || !boneMatrixData.empty())
|
||||
{
|
||||
|
@ -666,7 +670,7 @@ namespace SHADE
|
|||
instanceDataDescSet[frameIndex] = descPool->Allocate
|
||||
(
|
||||
SHGraphicsPredefinedData::GetPredefinedDescSetLayouts(layoutTypes),
|
||||
{ 0 }
|
||||
varDescCounts
|
||||
);
|
||||
#ifdef _DEBUG
|
||||
const auto& DESC_SETS = instanceDataDescSet[frameIndex]->GetVkHandle();
|
||||
|
@ -699,7 +703,12 @@ namespace SHADE
|
|||
0, static_cast<uint32_t>(matPropsDataSize)
|
||||
);
|
||||
|
||||
descSetUpdateRequired = true;
|
||||
// Update the descriptor set buffer
|
||||
instanceDataDescSet[frameIndex]->UpdateDescriptorSetBuffer
|
||||
(
|
||||
MATERIAL_DESC_SET_INDEX,
|
||||
SHGraphicsConstants::DescriptorSetBindings::PER_INST_MATERIAL_DATA
|
||||
);
|
||||
}
|
||||
|
||||
/* Animation Bone Data */
|
||||
|
@ -713,7 +722,7 @@ namespace SHADE
|
|||
BuffUsage::eVertexBuffer,
|
||||
"Batch Bone Indices Buffer"
|
||||
);
|
||||
const uint32_t BONE_MTX_DATA_BYTES = static_cast<uint32_t>(boneMatrixData.size() * sizeof(uint32_t));
|
||||
const uint32_t BONE_MTX_DATA_BYTES = static_cast<uint32_t>(boneMatrixData.size() * sizeof(SHMatrix));
|
||||
SHVkUtil::EnsureBufferAndCopyHostVisibleData
|
||||
(
|
||||
device, boneMatrixBuffer[frameIndex], boneMatrixData.data(), BONE_MTX_DATA_BYTES,
|
||||
|
@ -728,21 +737,15 @@ namespace SHADE
|
|||
MATERIAL_DESC_SET_INDEX,
|
||||
SHGraphicsConstants::DescriptorSetBindings::PER_INST_BONE_DATA,
|
||||
bufferList,
|
||||
static_cast<uint32_t>(matPropsDataSize),
|
||||
0,
|
||||
static_cast<uint32_t>(boneMatrixData.size() * sizeof(SHMatrix))
|
||||
);
|
||||
|
||||
descSetUpdateRequired = true;
|
||||
}
|
||||
|
||||
// Build and prepare the descriptor set if necessary
|
||||
if (descSetUpdateRequired)
|
||||
{
|
||||
// Update the descriptor set buffer
|
||||
instanceDataDescSet[frameIndex]->UpdateDescriptorSetBuffer
|
||||
(
|
||||
MATERIAL_DESC_SET_INDEX,
|
||||
SHGraphicsConstants::DescriptorSetBindings::PER_INST_MATERIAL_DATA
|
||||
SHGraphicsConstants::DescriptorSetBindings::PER_INST_BONE_DATA
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue