X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene3d%2Fpublic-api%2Floader%2Fgltf2-loader.cpp;h=532bbb6a63f9462d9c369c8d77cf3a4b9afdad80;hb=229b6c3c9c782b92c820b186da244bf2dc50dc32;hp=be1be4108b45a923660f04ed1a5b70a01447de75;hpb=2785f4990a014b76e582434db4bf9180ff145932;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-scene3d/public-api/loader/gltf2-loader.cpp b/dali-scene3d/public-api/loader/gltf2-loader.cpp index be1be41..532bbb6 100644 --- a/dali-scene3d/public-api/loader/gltf2-loader.cpp +++ b/dali-scene3d/public-api/loader/gltf2-loader.cpp @@ -19,10 +19,10 @@ #include // EXTERNAL INCLUDES +#include #include #include #include -#include #include // INTERNAL INCLUDES @@ -467,7 +467,7 @@ SamplerFlags::Type ConvertSampler(const gt::Ref& sampler) TextureDefinition ConvertTextureInfo(const gt::TextureInfo& mm, ConversionContext& context, const ImageMetadata& metaData = ImageMetadata()) { TextureDefinition textureDefinition; - std::string uri = std::string(mm.mTexture->mSource->mUri); + std::string uri = std::string(mm.mTexture->mSource->mUri); if(uri.empty()) { uint32_t bufferIndex = mm.mTexture->mSource->mBufferView->mBuffer.GetIndex(); @@ -478,7 +478,7 @@ TextureDefinition ConvertTextureInfo(const gt::TextureInfo& mm, ConversionContex stream.seekg(mm.mTexture->mSource->mBufferView->mByteOffset, stream.beg); std::vector dataBuffer; dataBuffer.resize(mm.mTexture->mSource->mBufferView->mByteLength); - stream.read(reinterpret_cast(dataBuffer.data()), mm.mTexture->mSource->mBufferView->mByteLength); + stream.read(reinterpret_cast(dataBuffer.data()), static_cast(static_cast(mm.mTexture->mSource->mBufferView->mByteLength))); return TextureDefinition{std::move(dataBuffer), ConvertSampler(mm.mTexture->mSampler), metaData.mMinSize, metaData.mSamplingMode}; } return TextureDefinition(); @@ -974,7 +974,7 @@ void LoadDataFromAccessor(ConversionContext& context, uint32_t bufferIndex, Vect auto& stream = buffer.GetBufferStream(); stream.clear(); stream.seekg(offset, stream.beg); - stream.read(reinterpret_cast(dataBuffer.Begin()), size); + stream.read(reinterpret_cast(dataBuffer.Begin()), static_cast(static_cast(size))); } template @@ -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]); @@ -1178,7 +1192,7 @@ void ProcessSkins(const gt::Document& doc, ConversionContext& context) virtual void Provide(Matrix& ibm) override { - DALI_ASSERT_ALWAYS(mStream.read(reinterpret_cast(ibm.AsFloat()), mElementSizeBytes)); + DALI_ASSERT_ALWAYS(mStream.read(reinterpret_cast(ibm.AsFloat()), static_cast(static_cast(mElementSizeBytes)))); } };