From: Taehyub Kim Date: Mon, 6 Sep 2021 04:47:47 +0000 (+0900) Subject: RiveAnimationView: apply time based rendering X-Git-Tag: dali_2.0.43~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2a2b30f23373a7f7f59e45dbf33b0f1e00c7b6b8;p=platform%2Fcore%2Fuifw%2Fdali-extension.git RiveAnimationView: apply time based rendering Change-Id: I7f0480fe43129770a9f2cdeb36e084560ad2a5be --- diff --git a/dali-extension/internal/rive-animation-view/animation-renderer/rive-animation-renderer.cpp b/dali-extension/internal/rive-animation-view/animation-renderer/rive-animation-renderer.cpp index de59872..433cb4c 100644 --- a/dali-extension/internal/rive-animation-view/animation-renderer/rive-animation-renderer.cpp +++ b/dali-extension/internal/rive-animation-view/animation-renderer/rive-animation-renderer.cpp @@ -233,7 +233,7 @@ void RiveAnimationRenderer::SetSize(uint32_t width, uint32_t height) DALI_LOG_INFO(gRiveAnimationLogFilter, Debug::Verbose, "RiveAnimationRenderer::SetSize: width = %d, height = %d [%p]\n", mWidth, mHeight, this); } -bool RiveAnimationRenderer::Render(uint32_t frameNumber) +bool RiveAnimationRenderer::Render(double elapsed) { Dali::Mutex::ScopedLock lock(mMutex); if(!mTbmQueue || !mTargetSurface || !mArtboard || mAnimations.empty()) @@ -292,13 +292,7 @@ bool RiveAnimationRenderer::Render(uint32_t frameNumber) mSwCanvas->clear(); mSwCanvas->target((uint32_t*)buffer, info.planes[0].stride / 4, info.width, info.height, tvg::SwCanvas::ARGB8888); - // Render Rive Frame - frameNumber = mStartFrameNumber + frameNumber; - - //FIXME: This should be changed to the time based rendering - static float elapsed = 0.0f; - elapsed = 1.0f / 60.0f; - + // Render Rive animation by elapsed time for(auto& animation : mAnimations) { if(animation.instance) diff --git a/dali-extension/internal/rive-animation-view/animation-renderer/rive-animation-renderer.h b/dali-extension/internal/rive-animation-view/animation-renderer/rive-animation-renderer.h index 2e7c673..64f4214 100755 --- a/dali-extension/internal/rive-animation-view/animation-renderer/rive-animation-renderer.h +++ b/dali-extension/internal/rive-animation-view/animation-renderer/rive-animation-renderer.h @@ -97,10 +97,10 @@ public: /** * @brief Renders the content to the target buffer synchronously. * - * @param[in] frameNumber The frame number to be rendered + * @param[in] elapsed The elapsed time * @return True if the rendering success, false otherwise. */ - bool Render(uint32_t frameNumber); + bool Render(double elapsed); /** * @brief Gets the total number of frames of the file. diff --git a/dali-extension/internal/rive-animation-view/rive-animation-task.cpp b/dali-extension/internal/rive-animation-view/rive-animation-task.cpp index abd9ce0..cbaf880 100644 --- a/dali-extension/internal/rive-animation-view/rive-animation-task.cpp +++ b/dali-extension/internal/rive-animation-view/rive-animation-task.cpp @@ -304,7 +304,11 @@ bool RiveAnimationTask::Rasterize() bool renderSuccess = false; if(mVectorRenderer) { - renderSuccess = mVectorRenderer->Render(currentFrame); + auto currentTime = std::chrono::system_clock::now(); + std::chrono::duration elapsed = currentTime - mEndTime; + mEndTime = currentTime; + + renderSuccess = mVectorRenderer->Render(elapsed.count()); if(!renderSuccess) { DALI_LOG_INFO(gRiveAnimationLogFilter, Debug::Verbose, "RiveAnimationTask::Rasterize: Rendering failed. Try again later.[%d] [%p]\n", currentFrame, this); diff --git a/dali-extension/internal/rive-animation-view/rive-animation-task.h b/dali-extension/internal/rive-animation-view/rive-animation-task.h index d714863..ac798a3 100644 --- a/dali-extension/internal/rive-animation-view/rive-animation-task.h +++ b/dali-extension/internal/rive-animation-view/rive-animation-task.h @@ -303,28 +303,29 @@ private: PAUSED ///< The animation is paused }; - std::string mUrl; - RiveAnimationRendererPtr mVectorRenderer; - AnimationData mAnimationData[2]; - RiveAnimationThread& mRiveAnimationThread; - ConditionalWait mConditionalWait; - std::unique_ptr mAnimationFinishedTrigger; - PlayState mPlayState; - TimePoint mNextFrameStartTime; - int64_t mFrameDurationMicroSeconds; - float mFrameRate; - uint32_t mCurrentFrame; - uint32_t mTotalFrame; - uint32_t mStartFrame; - uint32_t mEndFrame; - uint32_t mDroppedFrames; - uint32_t mWidth; - uint32_t mHeight; - uint32_t mAnimationDataIndex; - bool mUpdateFrameNumber; - bool mNeedAnimationFinishedTrigger; - bool mAnimationDataUpdated; - bool mDestroyTask; + std::string mUrl; + RiveAnimationRendererPtr mVectorRenderer; + AnimationData mAnimationData[2]; + RiveAnimationThread& mRiveAnimationThread; + ConditionalWait mConditionalWait; + std::unique_ptr mAnimationFinishedTrigger; + PlayState mPlayState; + TimePoint mNextFrameStartTime; + std::chrono::system_clock::time_point mEndTime; + int64_t mFrameDurationMicroSeconds; + float mFrameRate; + uint32_t mCurrentFrame; + uint32_t mTotalFrame; + uint32_t mStartFrame; + uint32_t mEndFrame; + uint32_t mDroppedFrames; + uint32_t mWidth; + uint32_t mHeight; + uint32_t mAnimationDataIndex; + bool mUpdateFrameNumber; + bool mNeedAnimationFinishedTrigger; + bool mAnimationDataUpdated; + bool mDestroyTask; }; } // namespace Internal