Until now, we always set uniforms even if nothing changed.
To avoid this thing, let we check whether it is really changed,
and set transform uniforms only required.
Change-Id: I66def37b8635e3a8afca0d2f55ec9bff8cb525af
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void AnimatedGradientVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
void AnimatedImageVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void AnimatedVectorImageVisual::OnSetTransform()
{
- Vector2 visualSize = mImpl->mTransform.GetVisualSize(mImpl->mControlSize);
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
+ {
+ mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
+ }
- if(IsOnScene() && visualSize != mVisualSize)
+ if(IsOnScene())
{
- DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnSetTransform: width = %f, height = %f [%p]\n", visualSize.width, visualSize.height, this);
+ Vector2 visualSize = mImpl->mTransform.GetVisualSize(mImpl->mControlSize);
- mVisualSize = visualSize;
+ if(visualSize != mVisualSize)
+ {
+ DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnSetTransform: width = %f, height = %f [%p]\n", visualSize.width, visualSize.height, this);
- SetVectorImageSize();
+ mVisualSize = visualSize;
- if(mPlayState == DevelImageVisual::PlayState::PLAYING && mAnimationData.playState != DevelImageVisual::PlayState::PLAYING)
- {
- mAnimationData.playState = DevelImageVisual::PlayState::PLAYING;
- mAnimationData.resendFlag |= VectorAnimationTask::RESEND_PLAY_STATE;
- }
+ SetVectorImageSize();
- TriggerVectorRasterization();
+ if(mPlayState == DevelImageVisual::PlayState::PLAYING && mAnimationData.playState != DevelImageVisual::PlayState::PLAYING)
+ {
+ mAnimationData.playState = DevelImageVisual::PlayState::PLAYING;
+ mAnimationData.resendFlag |= VectorAnimationTask::RESEND_PLAY_STATE;
+ }
+
+ TriggerVectorRasterization();
+ }
}
}
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
if(mImpl->mRenderer)
{
mImpl->mRenderer.SetProperty(mRadiusIndex, mRadius);
+
+ if(mImpl->mTransformMapChanged)
+ {
+ mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
+ }
}
}
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void BorderVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
void ColorVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void GradientVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void ImageVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void MeshVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void NPatchVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
auto fragmentShader = mAuxiliaryResourceStatus == Toolkit::Visual::ResourceStatus::READY ? SHADER_NPATCH_VISUAL_MASK_SHADER_FRAG
: SHADER_NPATCH_VISUAL_SHADER_FRAG;
- auto shaderType = mAuxiliaryResourceStatus == Toolkit::Visual::ResourceStatus::READY ? VisualFactoryCache::NINE_PATCH_MASK_SHADER
- : VisualFactoryCache::NINE_PATCH_SHADER;
+ auto shaderType = mAuxiliaryResourceStatus == Toolkit::Visual::ResourceStatus::READY ? VisualFactoryCache::NINE_PATCH_MASK_SHADER
+ : VisualFactoryCache::NINE_PATCH_SHADER;
// ask loader for the regions
if(mLoader.GetNPatchData(mId, data))
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void PrimitiveVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void SvgVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);
}
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
mAlwaysUsingCornerSquareness(false),
mIgnoreFittingMode(false),
mPixelAreaSetByFittingMode(false),
- mTransformMapSetForFittingMode(false)
+ mTransformMapSetForFittingMode(false),
+ mTransformMapChanged(false)
{
}
#define DALI_TOOLKIT_INTERNAL_VISUAL_BASE_DATA_IMPL_H
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
bool mIgnoreFittingMode : 1; ///< Whether we need to ignore fitting mode.
bool mPixelAreaSetByFittingMode : 1; ///< Whether the pixel area is set for fitting mode.
bool mTransformMapSetForFittingMode : 1; ///< Whether the transformMap is set for fitting mode.
+ bool mTransformMapChanged : 1; ///< Whether the transformMap is changed or not. We'll be false after SetTransform called.
};
} // namespace Visual
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
{
// Unusual case. SetProperty called after OnInitialize().
// Assume that DoAction call UPDATE_PROPERTY.
+ mImpl->mTransformMapChanged |= !map.Empty();
mImpl->mTransform.UpdatePropertyMap(map);
// Set Renderer uniforms, and change logics for subclasses.
OnSetTransform();
+
+ // Reset flag here.
+ mImpl->mTransformMapChanged = false;
}
else
{
void Visual::Base::SetTransformAndSize(const Property::Map& transform, Size controlSize)
{
mImpl->mControlSize = controlSize;
+ mImpl->mTransformMapChanged |= !transform.Empty();
mImpl->mTransform.UpdatePropertyMap(transform);
#if defined(DEBUG_ENABLED)
#endif
OnSetTransform();
+
+ // Reset flag here.
+ mImpl->mTransformMapChanged = false;
}
void Visual::Base::SetName(const std::string& name)
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 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.
void WireframeVisual::OnSetTransform()
{
- if(mImpl->mRenderer)
+ if(mImpl->mRenderer && mImpl->mTransformMapChanged)
{
//Register transform properties
mImpl->mTransform.SetUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT);