From fb4185107c299c3d05b7cdec74573ddbb5c2e6ea Mon Sep 17 00:00:00 2001 From: Eunki Hong Date: Mon, 13 Nov 2023 20:33:33 +0900 Subject: [PATCH] [Tizen] Remove useless flag at SceneGraph::Renderer.mDirtyFlag We can use PropertyOwner::Updated() instead of mDirtyFlag. Let we make use PropertyOwner system, instead of Renderer's own member value. Change-Id: Ibf18f8dc8e1b8ebaf140034fe9132d1b45ac69d2 Signed-off-by: Eunki Hong --- dali/internal/update/manager/update-manager.cpp | 2 +- dali/internal/update/nodes/scene-graph-layer.h | 19 ++- .../update/rendering/scene-graph-renderer.cpp | 127 +++++++++++++-------- .../update/rendering/scene-graph-renderer.h | 9 +- 4 files changed, 96 insertions(+), 61 deletions(-) diff --git a/dali/internal/update/manager/update-manager.cpp b/dali/internal/update/manager/update-manager.cpp index df63dc5..ed899f4 100644 --- a/dali/internal/update/manager/update-manager.cpp +++ b/dali/internal/update/manager/update-manager.cpp @@ -1356,7 +1356,7 @@ void UpdateManager::PostRender() // Reset dirty flag for(auto&& renderer : mImpl->renderers) { - renderer->ResetDirtyFlag(); + renderer->SetUpdated(false); } for(auto&& shader : mImpl->shaders) diff --git a/dali/internal/update/nodes/scene-graph-layer.h b/dali/internal/update/nodes/scene-graph-layer.h index 638688b..1d56a00 100644 --- a/dali/internal/update/nodes/scene-graph-layer.h +++ b/dali/internal/update/nodes/scene-graph-layer.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_SCENE_GRAPH_LAYER_H /* - * Copyright (c) 2022 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. @@ -77,7 +77,6 @@ namespace Internal { namespace SceneGraph { - using RenderableContainer = Dali::Vector; /** @@ -197,6 +196,16 @@ public: } /** + * Get the reuse of the model view matrices of all renderers for this layer is enabled. + * @param[in] updateBufferIndex The current update buffer index. + * @return Whether all child transform was clean or not. + */ + bool GetReuseRenderers(BufferIndex updateBufferIndex) const + { + return mAllChildTransformsClean[updateBufferIndex]; + } + + /** * Checks if it is ok to reuse renderers. Renderers can be reused if ModelView transform for all the renderers * has not changed from previous use. * @param[in] camera A pointer to the camera that we want to use to render the list. @@ -233,10 +242,10 @@ private: Layer(); // Delete copy and move - Layer(const Layer&) = delete; - Layer(Layer&&) = delete; + Layer(const Layer&) = delete; + Layer(Layer&&) = delete; Layer& operator=(const Layer& rhs) = delete; - Layer& operator=(Layer&& rhs) = delete; + Layer& operator=(Layer&& rhs) = delete; public: // For update-algorithms RenderableContainer colorRenderables; diff --git a/dali/internal/update/rendering/scene-graph-renderer.cpp b/dali/internal/update/rendering/scene-graph-renderer.cpp index 85c269a..1d404aa 100644 --- a/dali/internal/update/rendering/scene-graph-renderer.cpp +++ b/dali/internal/update/rendering/scene-graph-renderer.cpp @@ -1,5 +1,5 @@ /* - * 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. @@ -114,7 +114,6 @@ Renderer::Renderer() mUpdateDecay(Renderer::Decay::INITIAL), mRegenerateUniformMap(false), mPremultipledAlphaEnabled(false), - mDirtyFlag(true), mOpacity(1.0f), mDepthIndex(0) { @@ -146,7 +145,7 @@ RendererKey Renderer::GetKey(Renderer* renderer) bool Renderer::PrepareRender(BufferIndex updateBufferIndex) { - bool rendererUpdated = mDirtyFlag || mResendFlag || mRenderingBehavior == DevelRenderer::Rendering::CONTINUOUSLY || mUpdateDecay > 0; + bool rendererUpdated = Updated() || mResendFlag || mRenderingBehavior == DevelRenderer::Rendering::CONTINUOUSLY || mUpdateDecay > 0; auto shaderMapChangeCounter = mShader ? mShader->GetUniformMap().GetChangeCounter() : 0u; bool shaderMapChanged = mShader && (mShaderMapChangeCounter != shaderMapChangeCounter); if(shaderMapChanged) @@ -170,7 +169,7 @@ bool Renderer::PrepareRender(BufferIndex updateBufferIndex) mUpdateDecay = static_cast(static_cast(mUpdateDecay) - 1); } - if(mDirtyFlag || mResendFlag || mRenderingBehavior == DevelRenderer::Rendering::CONTINUOUSLY) // We don't check mUpdateDecay + if(mResendFlag || mRenderingBehavior == DevelRenderer::Rendering::CONTINUOUSLY) // We don't check mUpdateDecay { SetUpdated(true); } @@ -337,10 +336,12 @@ void Renderer::SetTextures(TextureSet* textureSet) { DALI_ASSERT_DEBUG(textureSet != NULL && "Texture set pointer is NULL"); - mTextureSet = textureSet; + if(mTextureSet != textureSet) + { + mTextureSet = textureSet; - mDirtyFlag = true; - SetUpdated(true); + SetUpdated(true); + } } const Vector* Renderer::GetTextures() const @@ -357,37 +358,51 @@ void Renderer::SetShader(Shader* shader) { DALI_ASSERT_DEBUG(shader != NULL && "Shader pointer is NULL"); - mShader = shader; - mShaderMapChangeCounter = 0u; - mRegenerateUniformMap = true; - mResendFlag |= RESEND_GEOMETRY | RESEND_SHADER; - mDirtyFlag = true; + if(mShader != shader) + { + mShader = shader; + mShaderMapChangeCounter = 0u; + mRegenerateUniformMap = true; + mResendFlag |= RESEND_GEOMETRY | RESEND_SHADER; + + SetUpdated(true); + } } void Renderer::SetGeometry(Render::Geometry* geometry) { DALI_ASSERT_DEBUG(geometry != NULL && "Geometry pointer is NULL"); - mGeometry = geometry; - - mDirtyFlag = true; - if(mRenderer) + if(mGeometry != geometry) { - mResendFlag |= RESEND_GEOMETRY; + mGeometry = geometry; + + if(mRenderer) + { + mResendFlag |= RESEND_GEOMETRY; + } + SetUpdated(true); } } void Renderer::SetDepthIndex(int depthIndex) { - mDepthIndex = depthIndex; + if(mDepthIndex != depthIndex) + { + mDepthIndex = depthIndex; - mDirtyFlag = true; - SetUpdated(true); + SetUpdated(true); + } } void Renderer::SetFaceCullingMode(FaceCullingMode::Type faceCullingMode) { - mFaceCullingMode = faceCullingMode; - mResendFlag |= RESEND_FACE_CULLING_MODE; + if(mFaceCullingMode != faceCullingMode) + { + mFaceCullingMode = faceCullingMode; + mResendFlag |= RESEND_FACE_CULLING_MODE; + + SetUpdated(true); + } } FaceCullingMode::Type Renderer::GetFaceCullingMode() const @@ -397,10 +412,12 @@ FaceCullingMode::Type Renderer::GetFaceCullingMode() const void Renderer::SetBlendMode(BlendMode::Type blendingMode) { - mBlendMode = blendingMode; + if(mBlendMode != blendingMode) + { + mBlendMode = blendingMode; - mDirtyFlag = true; - SetUpdated(true); + SetUpdated(true); + } } BlendMode::Type Renderer::GetBlendMode() const @@ -414,7 +431,8 @@ void Renderer::SetBlendingOptions(uint32_t options) { mBlendBitmask = options; mResendFlag |= RESEND_BLEND_BIT_MASK; - mDirtyFlag = true; + + SetUpdated(true); } } @@ -442,6 +460,8 @@ void Renderer::SetBlendColor(const Vector4& blendColor) } mResendFlag |= RESEND_BLEND_COLOR; + + SetUpdated(true); } Vector4 Renderer::GetBlendColor() const @@ -455,8 +475,13 @@ Vector4 Renderer::GetBlendColor() const void Renderer::SetIndexedDrawFirstElement(uint32_t firstElement) { - mIndexedDrawFirstElement = firstElement; - mResendFlag |= RESEND_INDEXED_DRAW_FIRST_ELEMENT; + if(mIndexedDrawFirstElement != firstElement) + { + mIndexedDrawFirstElement = firstElement; + mResendFlag |= RESEND_INDEXED_DRAW_FIRST_ELEMENT; + + SetUpdated(true); + } } uint32_t Renderer::GetIndexedDrawFirstElement() const @@ -466,8 +491,13 @@ uint32_t Renderer::GetIndexedDrawFirstElement() const void Renderer::SetIndexedDrawElementsCount(uint32_t elementsCount) { - mIndexedDrawElementsCount = elementsCount; - mResendFlag |= RESEND_INDEXED_DRAW_ELEMENTS_COUNT; + if(mIndexedDrawElementsCount != elementsCount) + { + mIndexedDrawElementsCount = elementsCount; + mResendFlag |= RESEND_INDEXED_DRAW_ELEMENTS_COUNT; + + SetUpdated(true); + } } uint32_t Renderer::GetIndexedDrawElementsCount() const @@ -477,8 +507,13 @@ uint32_t Renderer::GetIndexedDrawElementsCount() const void Renderer::EnablePreMultipliedAlpha(bool preMultipled) { - mPremultipledAlphaEnabled = preMultipled; - mResendFlag |= RESEND_PREMULTIPLIED_ALPHA; + if(mPremultipledAlphaEnabled != preMultipled) + { + mPremultipledAlphaEnabled = preMultipled; + mResendFlag |= RESEND_PREMULTIPLIED_ALPHA; + + SetUpdated(true); + } } bool Renderer::IsPreMultipliedAlphaEnabled() const @@ -569,9 +604,13 @@ void Renderer::SetStencilOperationOnZPass(StencilOperation::Type stencilOperatio void Renderer::SetRenderCallback(RenderCallback* callback) { - mRenderCallback = callback; - mResendFlag |= RESEND_SET_RENDER_CALLBACK; - mDirtyFlag = true; + if(mRenderCallback != callback) + { + mRenderCallback = callback; + mResendFlag |= RESEND_SET_RENDER_CALLBACK; + + SetUpdated(true); + } } const Render::Renderer::StencilParameters& Renderer::GetStencilParameters() const @@ -583,7 +622,6 @@ void Renderer::BakeOpacity(BufferIndex updateBufferIndex, float opacity) { mOpacity.Bake(updateBufferIndex, opacity); - mDirtyFlag = true; SetUpdated(true); } @@ -594,10 +632,12 @@ float Renderer::GetOpacity(BufferIndex updateBufferIndex) const void Renderer::SetRenderingBehavior(DevelRenderer::Rendering::Type renderingBehavior) { - mRenderingBehavior = renderingBehavior; + if(mRenderingBehavior != renderingBehavior) + { + mRenderingBehavior = renderingBehavior; - mDirtyFlag = true; - SetUpdated(true); + SetUpdated(true); + } } DevelRenderer::Rendering::Type Renderer::GetRenderingBehavior() const @@ -777,14 +817,7 @@ void Renderer::SetDrawCommands(Dali::DevelRenderer::DrawCommand* pDrawCommands, bool Renderer::IsDirty() const { // Check whether the opacity property has changed - return (mDirtyFlag || !mOpacity.IsClean()); -} - -void Renderer::ResetDirtyFlag() -{ - mDirtyFlag = false; - - SetUpdated(false); + return (Updated() || !mOpacity.IsClean()); } void Renderer::ResetToBaseValues(BufferIndex updateBufferIndex) diff --git a/dali/internal/update/rendering/scene-graph-renderer.h b/dali/internal/update/rendering/scene-graph-renderer.h index 8565853..5dabf05 100644 --- a/dali/internal/update/rendering/scene-graph-renderer.h +++ b/dali/internal/update/rendering/scene-graph-renderer.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_SCENE_GRAPH_RENDERER_H /* - * 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. @@ -488,12 +488,6 @@ public: bool IsDirty() const; /** - * Reset both dirty flag and updated flag. - * @note This is called after rendering has completed. - */ - void ResetDirtyFlag(); - - /** * @brief Reset to base values of all animatable properties. * * @param[in] updateBufferIndex the current buffer index @@ -597,7 +591,6 @@ private: bool mRegenerateUniformMap : 1; ///< true if the map should be regenerated bool mPremultipledAlphaEnabled : 1; ///< Flag indicating whether the Pre-multiplied Alpha Blending is required - bool mDirtyFlag : 1; ///< Flag indicating whether the properties are changed std::vector mDrawCommands; Dali::RenderCallback* mRenderCallback{nullptr}; -- 2.7.4