X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Frender%2Fcommon%2Frender-algorithms.cpp;h=406f21655e6c98aeaf4682fc85e238647953e08f;hb=8f612650d20752ab6aba022a9dbefdb883968e8f;hp=e00a96c058e944d0f453461929749556339bd54d;hpb=3e6302f19066584da65035c81f8bcb6a3da941fc;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/render/common/render-algorithms.cpp b/dali/internal/render/common/render-algorithms.cpp old mode 100644 new mode 100755 index e00a96c..406f216 --- a/dali/internal/render/common/render-algorithms.cpp +++ b/dali/internal/render/common/render-algorithms.cpp @@ -449,6 +449,7 @@ inline void RenderAlgorithms::ProcessRenderList( const RenderList& renderList, if (!rootClippingRect.IsEmpty()) { context.SetScissorTest( true ); + context.Scissor( rootClippingRect.x, rootClippingRect.y, rootClippingRect.width, rootClippingRect.height ); mScissorStack.push_back( rootClippingRect ); } // We are not performing a layer clip and no clipping rect set. Add the viewport as the root scissor rectangle. @@ -497,6 +498,22 @@ inline void RenderAlgorithms::ProcessRenderList( const RenderList& renderList, { const RenderItem& item = renderList.GetItem( index ); + // Discard renderers outside the root clipping rect + bool skip = true; + if( !rootClippingRect.IsEmpty() ) + { + auto rect = item.CalculateViewportSpaceAABB( item.mUpdateSize, mViewportRectangle.width, mViewportRectangle.height ); + + if(rect.Intersect( rootClippingRect )) + { + skip = false; + } + } + else + { + skip = false; + } + DALI_PRINT_RENDER_ITEM( item ); // Set up clipping based on both the Renderer and Actor APIs. @@ -510,9 +527,9 @@ inline void RenderAlgorithms::ProcessRenderList( const RenderList& renderList, // draw-mode state, such as Overlays. // If the flags are set to "AUTO", the behavior then depends on the type of renderer. Overlay Renderers will always // disable depth testing and writing. Color Renderers will enable them if the Layer does. - if( depthBufferAvailable == Integration::DepthBufferAvailable::TRUE ) + if (depthBufferAvailable == Integration::DepthBufferAvailable::TRUE) { - SetupDepthBuffer( item, context, autoDepthTestMode, firstDepthBufferUse ); + SetupDepthBuffer(item, context, autoDepthTestMode, firstDepthBufferUse); } // Depending on whether the renderer has draw commands attached or not the rendering process will @@ -520,12 +537,15 @@ inline void RenderAlgorithms::ProcessRenderList( const RenderList& renderList, // iteration must be done and the default behaviour of the renderer will be executed. // The queues allow to iterate over the same renderer multiple times changing the state of the renderer. // It is similar to the multi-pass rendering. - auto const MAX_QUEUE = item.mRenderer->GetDrawCommands().empty() ? 1 : DevelRenderer::RENDER_QUEUE_MAX; - for( auto queue = 0u; queue < MAX_QUEUE; ++queue ) + if( !skip ) { - // Render the item. - item.mRenderer->Render(context, bufferIndex, *item.mNode, item.mModelMatrix, item.mModelViewMatrix, - viewMatrix, projectionMatrix, item.mSize, !item.mIsOpaque, boundTextures, instruction, queue); + auto const MAX_QUEUE = item.mRenderer->GetDrawCommands().empty() ? 1 : DevelRenderer::RENDER_QUEUE_MAX; + for (auto queue = 0u; queue < MAX_QUEUE; ++queue) + { + // Render the item. + item.mRenderer->Render(context, bufferIndex, *item.mNode, item.mModelMatrix, item.mModelViewMatrix, + viewMatrix, projectionMatrix, item.mSize, !item.mIsOpaque, boundTextures, instruction, queue); + } } } }