X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-scene3d%2Fpublic-api%2Floader%2Fgltf2-loader.cpp;h=532bbb6a63f9462d9c369c8d77cf3a4b9afdad80;hp=69bcd515f2e58a2ddee693437a90f273295149c9;hb=229b6c3c9c782b92c820b186da244bf2dc50dc32;hpb=f96dc176ca102496ea0c7f895d6d75482fdce5af diff --git a/dali-scene3d/public-api/loader/gltf2-loader.cpp b/dali-scene3d/public-api/loader/gltf2-loader.cpp index 69bcd51..532bbb6 100644 --- a/dali-scene3d/public-api/loader/gltf2-loader.cpp +++ b/dali-scene3d/public-api/loader/gltf2-loader.cpp @@ -988,6 +988,7 @@ float LoadDataFromAccessors(ConversionContext& context, const gltf2::Accessor& i LoadDataFromAccessor(context, output.mBufferView->mBuffer.GetIndex(), inputDataBuffer, input.mBufferView->mByteOffset + input.mByteOffset, inputDataBufferSize); LoadDataFromAccessor(context, output.mBufferView->mBuffer.GetIndex(), outputDataBuffer, output.mBufferView->mByteOffset + output.mByteOffset, outputDataBufferSize); + ApplyAccessorMinMax(input, reinterpret_cast(inputDataBuffer.begin())); ApplyAccessorMinMax(output, reinterpret_cast(outputDataBuffer.begin())); return inputDataBuffer[input.mCount - 1u]; @@ -1004,6 +1005,12 @@ float LoadKeyFrames(ConversionContext& context, const gt::Animation::Channel& ch const float duration = std::max(LoadDataFromAccessors(context, input, output, inputDataBuffer, outputDataBuffer), AnimationDefinition::MIN_DURATION_SECONDS); + // Set first frame value as first keyframe (gltf animation spec) + if(input.mCount > 0 && !Dali::EqualsZero(inputDataBuffer[0])) + { + keyFrames.Add(0.0f, outputDataBuffer[0]); + } + for(uint32_t i = 0; i < input.mCount; ++i) { keyFrames.Add(inputDataBuffer[i] / duration, outputDataBuffer[i]); @@ -1020,7 +1027,7 @@ float LoadBlendShapeKeyFrames(ConversionContext& context, const gt::Animation::C Vector inputDataBuffer; Vector outputDataBuffer; - const float duration = LoadDataFromAccessors(context, input, output, inputDataBuffer, outputDataBuffer); + const float duration = std::max(LoadDataFromAccessors(context, input, output, inputDataBuffer, outputDataBuffer), AnimationDefinition::MIN_DURATION_SECONDS); char weightNameBuffer[32]; auto prefixSize = snprintf(weightNameBuffer, sizeof(weightNameBuffer), "%s[", BLEND_SHAPE_WEIGHTS_UNIFORM.c_str()); @@ -1035,6 +1042,13 @@ float LoadBlendShapeKeyFrames(ConversionContext& context, const gt::Animation::C animatedProperty.mPropertyName = std::string(weightNameBuffer); animatedProperty.mKeyFrames = KeyFrames::New(); + + // Set first frame value as first keyframe (gltf animation spec) + if(input.mCount > 0 && !Dali::EqualsZero(inputDataBuffer[0])) + { + animatedProperty.mKeyFrames.Add(0.0f, outputDataBuffer[weightIndex]); + } + for(uint32_t i = 0; i < input.mCount; ++i) { animatedProperty.mKeyFrames.Add(inputDataBuffer[i] / duration, outputDataBuffer[i * endWeightIndex + weightIndex]);