diff --git a/filament/src/components/RenderableManager.cpp b/filament/src/components/RenderableManager.cpp index 580c3da97f..8f5b2f3634 100644 --- a/filament/src/components/RenderableManager.cpp +++ b/filament/src/components/RenderableManager.cpp @@ -55,6 +55,7 @@ #include #include +#include #include #include #include @@ -477,6 +478,9 @@ RenderableManager::Builder::Result RenderableManager::Builder::build(Engine& eng FILAMENT_CHECK_PRECONDITION(mImpl->mSkinningBoneCount <= CONFIG_MAX_BONE_COUNT) << "bone count > " << CONFIG_MAX_BONE_COUNT; + FILAMENT_CHECK_PRECONDITION(mImpl->mSkinningBufferOffset <= std::numeric_limits::max()) + << "skinning buffer offset > " << std::numeric_limits::max(); + FILAMENT_CHECK_PRECONDITION( mImpl->mInstanceCount <= CONFIG_MAX_INSTANCES || !mImpl->mInstanceBuffer) << "instance count is " << mImpl->mInstanceCount @@ -928,6 +932,9 @@ void FRenderableManager::setBones(Instance const ci, FILAMENT_CHECK_PRECONDITION(!bones.skinningBufferMode) << "Disable skinning buffer mode to use this API"; + FILAMENT_CHECK_PRECONDITION(offset <= bones.count) + << "bone offset is out of bounds (" << offset << " > " << bones.count << ")"; + assert_invariant(bones.handle && offset + boneCount <= bones.count); if (bones.handle) { boneCount = std::min(boneCount, bones.count - offset); @@ -944,6 +951,9 @@ void FRenderableManager::setBones(Instance const ci, FILAMENT_CHECK_PRECONDITION(!bones.skinningBufferMode) << "Disable skinning buffer mode to use this API"; + FILAMENT_CHECK_PRECONDITION(offset <= bones.count) + << "bone offset is out of bounds (" << offset << " > " << bones.count << ")"; + assert_invariant(bones.handle && offset + boneCount <= bones.count); if (bones.handle) { boneCount = std::min(boneCount, bones.count - offset);