X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fmanager%2Frender-instruction-processor.cpp;h=a76632e1a25160d6bddc3607cadc3802f6de3233;hb=b43741a90b40ca9dfbd33d6a9d390d3c09230e89;hp=204a472f3f712e61a8e0422247e5bf381c95d3be;hpb=f8f66aed84648c2d2c2fc8fec6cf02a1fd3a6607;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 old mode 100644 new mode 100755 index 204a472..a76632e --- a/dali/internal/update/manager/render-instruction-processor.cpp +++ b/dali/internal/update/manager/render-instruction-processor.cpp @@ -33,6 +33,7 @@ #include #include #include +#include namespace { @@ -161,8 +162,8 @@ inline void AddRendererToRenderList( BufferIndex updateBufferIndex, { bool inside( true ); Node* node = renderable.mNode; - - if( cull && renderable.mRenderer && !renderable.mRenderer->GetShader().HintEnabled( Dali::Shader::Hint::MODIFIES_GEOMETRY ) ) + bool isModifiesGeometryHint = false; + if( cull && renderable.mRenderer && !( isModifiesGeometryHint = renderable.mRenderer->GetShader().HintEnabled( Dali::Shader::Hint::MODIFIES_GEOMETRY ) ) ) { const Vector4& boundingSphere = node->GetBoundingSphere(); inside = ( boundingSphere.w > Math::MACHINE_EPSILON_1000 ) && @@ -180,17 +181,27 @@ inline void AddRendererToRenderList( BufferIndex updateBufferIndex, item.mNode = renderable.mNode; item.mIsOpaque = ( opacityType == Renderer::OPAQUE ); item.mDepthIndex = 0; + item.mPartialUpdateEnabled = false; - if(!isLayer3d) + if( !isLayer3d ) { item.mDepthIndex = renderable.mNode->GetDepthIndex(); } + if( isLayer3d || isModifiesGeometryHint ) + { + renderList.SetPartialUpdateEnabled( false ); + } if( DALI_LIKELY( renderable.mRenderer ) ) { item.mRenderer = &renderable.mRenderer->GetRenderer(); item.mTextureSet = renderable.mRenderer->GetTextures(); item.mDepthIndex += renderable.mRenderer->GetDepthIndex(); + + if( FaceCullingMode::NONE != renderable.mRenderer->GetFaceCullingMode() ) + { + renderList.SetPartialUpdateEnabled( false ); + } } else { @@ -201,13 +212,27 @@ inline void AddRendererToRenderList( BufferIndex updateBufferIndex, node->GetWorldMatrixAndSize( item.mModelMatrix, item.mSize ); Matrix::Multiply( item.mModelViewMatrix, item.mModelMatrix, viewMatrix ); - } - node->SetCulled( updateBufferIndex, false ); + if( DALI_LIKELY( item.mRenderer ) && renderList.IsPartialUpdateEnabled() ) + { + if( node->IsPropertyDirty() || node->IsComponentChanged() ) + { + item.mPartialUpdateEnabled = true; + + item.mUpdateSizeHint = item.mSize; + Vector3 updateSizeHint = node->GetUpdateSizeHint( updateBufferIndex ); + if( updateSizeHint != Vector3::ZERO ) + { + item.mUpdateSizeHint = updateSizeHint; + } + } + } + } + node->SetCulled( updateBufferIndex, false ); } else { - node->SetCulled( updateBufferIndex, true ); + node->SetCulled( updateBufferIndex, true ); } } @@ -434,6 +459,10 @@ void RenderInstructionProcessor::Prepare( BufferIndex updateBufferIndex, if( !SetupRenderList( renderables, layer, instruction, tryReuseRenderList, &renderList ) ) { renderList->SetHasColorRenderItems( true ); + if( !isLayer3D ) + { + renderList->SetPartialUpdateEnabled( true ); + } AddRenderersToRenderList( updateBufferIndex, *renderList, renderables, @@ -456,6 +485,10 @@ void RenderInstructionProcessor::Prepare( BufferIndex updateBufferIndex, if( !SetupRenderList( renderables, layer, instruction, tryReuseRenderList, &renderList ) ) { renderList->SetHasColorRenderItems( false ); + if( !isLayer3D ) + { + renderList->SetPartialUpdateEnabled( true ); + } AddRenderersToRenderList( updateBufferIndex, *renderList, renderables,