X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fmanager%2Frender-instruction-processor.cpp;h=1ff28a845b188bc176cc161d0e75c94485046335;hb=refs%2Fchanges%2F76%2F270676%2F20;hp=a3954364d05942ba831d8ca572882858d75549f6;hpb=9c457713d65212ac07730a2a41dfe4eb207156be;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/manager/render-instruction-processor.cpp b/dali/internal/update/manager/render-instruction-processor.cpp index a395436..1ff28a8 100644 --- a/dali/internal/update/manager/render-instruction-processor.cpp +++ b/dali/internal/update/manager/render-instruction-processor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -194,7 +194,10 @@ inline void AddRendererToRenderList(BufferIndex updateBufferIndex, Matrix nodeModelViewMatrix(false); bool nodeModelViewMatrixSet(false); - if(cull && renderable.mRenderer && !renderable.mRenderer->GetShader().HintEnabled(Dali::Shader::Hint::MODIFIES_GEOMETRY) && node->GetClippingMode() == ClippingMode::DISABLED) + // Don't cull items which have render callback + bool hasRenderCallback = (renderable.mRenderer && renderable.mRenderer->GetRenderCallback()); + + if(cull && renderable.mRenderer && (hasRenderCallback || (!renderable.mRenderer->GetShader().HintEnabled(Dali::Shader::Hint::MODIFIES_GEOMETRY) && node->GetClippingMode() == ClippingMode::DISABLED))) { const Vector4& boundingSphere = node->GetBoundingSphere(); inside = (boundingSphere.w > Math::MACHINE_EPSILON_1000) && @@ -222,10 +225,18 @@ inline void AddRendererToRenderList(BufferIndex updateBufferIndex, if(inside) { - Renderer::OpacityType opacityType = renderable.mRenderer ? renderable.mRenderer->GetOpacityType(updateBufferIndex, *node) : Renderer::OPAQUE; + bool skipRender(false); + bool isOpaque = true; + if(!hasRenderCallback) + { + Renderer::OpacityType opacityType = renderable.mRenderer ? renderable.mRenderer->GetOpacityType(updateBufferIndex, *node) : Renderer::OPAQUE; + + // We can skip render when node is not clipping and transparent + skipRender = (opacityType == Renderer::TRANSPARENT && node->GetClippingMode() == ClippingMode::DISABLED); + + isOpaque = (opacityType == Renderer::OPAQUE); + } - // We can skip render when node is not clipping and transparent - const bool skipRender(opacityType == Renderer::TRANSPARENT && node->GetClippingMode() == ClippingMode::DISABLED); if(!skipRender) { // Get the next free RenderItem. @@ -237,9 +248,9 @@ inline void AddRendererToRenderList(BufferIndex updateBufferIndex, auto& partialRenderingCacheInfo = node->GetPartialRenderingData().GetCurrentCacheInfo(); partialRenderingCacheInfo.node = node; - partialRenderingCacheInfo.isOpaque = (opacityType == Renderer::OPAQUE); + partialRenderingCacheInfo.isOpaque = isOpaque; partialRenderingCacheInfo.renderer = renderable.mRenderer; - partialRenderingCacheInfo.color = node->GetColor(updateBufferIndex); + partialRenderingCacheInfo.color = node->GetWorldColor(updateBufferIndex); partialRenderingCacheInfo.depthIndex = node->GetDepthIndex(); if(DALI_LIKELY(renderable.mRenderer)) @@ -248,7 +259,7 @@ inline void AddRendererToRenderList(BufferIndex updateBufferIndex, } item.mNode = node; - item.mIsOpaque = (opacityType == Renderer::OPAQUE); + item.mIsOpaque = isOpaque; item.mColor = node->GetColor(updateBufferIndex); item.mDepthIndex = 0;