void VectorAnimationRendererTizen::PrepareTarget(std::shared_ptr<RenderingData> renderingData)
{
std::shared_ptr<RenderingDataImpl> renderingDataImpl = std::static_pointer_cast<RenderingDataImpl>(renderingData);
- renderingDataImpl->mTargetSurface = NativeImageSourceQueue::New(renderingDataImpl->mWidth, renderingDataImpl->mHeight, NativeImageSourceQueue::ColorFormat::BGRA8888);
- renderingDataImpl->mTexture = Texture::New(*renderingDataImpl->mTargetSurface);
-}
-
-// This Method is called inside mRenderingDataMutex
-void VectorAnimationRendererTizen::SetShader(std::shared_ptr<RenderingData> renderingData)
-{
- if(mShaderChanged)
- {
- return;
- }
-
- Shader shader = mRenderer.GetShader();
-
- std::string fragmentShader;
- std::string vertexShader;
-
- // Get the current fragment shader source
- Property::Value program = shader.GetProperty(Shader::Property::PROGRAM);
- Property::Map* map = program.GetMap();
- if(map)
- {
- Property::Value* fragment = map->Find("fragment");
- if(fragment)
- {
- fragmentShader = fragment->Get<std::string>();
- }
-
- Property::Value* vertex = map->Find("vertex");
- if(vertex)
- {
- vertexShader = vertex->Get<std::string>();
- }
- }
-
- // Get custom fragment shader prefix
- if(!renderingData)
- {
- DALI_LOG_ERROR("Target Surface is not yet prepared.\n");
- }
- std::shared_ptr<RenderingDataImpl> renderingDataImpl = std::static_pointer_cast<RenderingDataImpl>(renderingData);
- renderingDataImpl->mTargetSurface->ApplyNativeFragmentShader(fragmentShader);
-
- // Set the modified shader again
- Shader newShader = Shader::New(vertexShader, fragmentShader);
- newShader.RegisterProperty(PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT);
-
- mRenderer.SetShader(newShader);
-
- mShaderChanged = true;
+ renderingDataImpl->mTargetSurface = NativeImageSourceQueue::New(renderingDataImpl->mWidth, renderingDataImpl->mHeight, NativeImageSourceQueue::ColorFormat::BGRA8888);
+ renderingDataImpl->mTexture = Texture::New(*renderingDataImpl->mTargetSurface);
}
// This Method is called inside mRenderingDataMutex
/*
- * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
mFrameRate(60.0f),
mLoadFailed(false),
mResourceReady(false),
- mShaderChanged(false),
mResourceReadyTriggered(false),
mEnableFixedCache(false)
{
void VectorAnimationRenderer::SetRenderer(Renderer renderer)
{
- mRenderer = renderer;
- mShaderChanged = false;
+ mRenderer = renderer;
+
+ bool emitSignal = false;
if(IsTargetPrepared())
{
textureSet.SetTexture(0, GetTargetTexture());
- mUploadCompletedSignal.Emit();
+ emitSignal = true;
}
}
+ if(emitSignal)
{
- Dali::Mutex::ScopedLock lock(mRenderingDataMutex);
- SetShader(mPreparedRenderingData ? mPreparedRenderingData : mCurrentRenderingData);
+ mUploadCompletedSignal.Emit();
}
}
}
PrepareTarget(preparedRenderingData);
- if(mRenderer)
- {
- SetShader(preparedRenderingData);
- }
-
OnSetSize(preparedRenderingData);
{
case VectorProperty::FILL_COLOR:
{
mVectorRenderer->setValue<rlottie::Property::FillColor>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
Vector3 color;
if(value.Get(color))
case VectorProperty::FILL_OPACITY:
{
mVectorRenderer->setValue<rlottie::Property::FillOpacity>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
float opacity;
if(value.Get(opacity))
case VectorProperty::STROKE_COLOR:
{
mVectorRenderer->setValue<rlottie::Property::StrokeColor>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
Vector3 color;
if(value.Get(color))
case VectorProperty::STROKE_OPACITY:
{
mVectorRenderer->setValue<rlottie::Property::StrokeOpacity>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
float opacity;
if(value.Get(opacity))
case VectorProperty::STROKE_WIDTH:
{
mVectorRenderer->setValue<rlottie::Property::StrokeWidth>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
float width;
if(value.Get(width))
case VectorProperty::TRANSFORM_ANCHOR:
{
mVectorRenderer->setValue<rlottie::Property::TrAnchor>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
Vector2 point;
if(value.Get(point))
case VectorProperty::TRANSFORM_POSITION:
{
mVectorRenderer->setValue<rlottie::Property::TrPosition>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
Vector2 position;
if(value.Get(position))
case VectorProperty::TRANSFORM_SCALE:
{
mVectorRenderer->setValue<rlottie::Property::TrScale>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
Vector2 scale;
if(value.Get(scale))
case VectorProperty::TRANSFORM_ROTATION:
{
mVectorRenderer->setValue<rlottie::Property::TrRotation>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
float rotation;
if(value.Get(rotation))
case VectorProperty::TRANSFORM_OPACITY:
{
mVectorRenderer->setValue<rlottie::Property::TrOpacity>(keyPath,
- [property, callback, id](const rlottie::FrameInfo& info)
- {
+ [property, callback, id](const rlottie::FrameInfo& info) {
Property::Value value = CallbackBase::ExecuteReturn<Property::Value>(*callback, id, property, info.curFrame());
float opacity;
if(value.Get(opacity))