X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Frender%2Frenderers%2Frender-renderer.cpp;h=9324d86c3bb083e5b1f8003d52190a3d410b72cb;hb=baef81c81217e013c1cc253ac636f154c7e61370;hp=2222abd8eaca46afaa418da6e742e65bdcc68c64;hpb=d8944bba8449a3c5bce03041eccccf2eba4a7ae3;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/render/renderers/render-renderer.cpp b/dali/internal/render/renderers/render-renderer.cpp index 2222abd..9324d86 100644 --- a/dali/internal/render/renderers/render-renderer.cpp +++ b/dali/internal/render/renderers/render-renderer.cpp @@ -145,7 +145,8 @@ Renderer::Renderer( SceneGraph::RenderDataProvider* dataProvider, mDepthWriteMode( depthWriteMode ), mDepthTestMode( depthTestMode ), mUpdateAttributesLocation( true ), - mPremultipledAlphaEnabled( preMultipliedAlphaEnabled ) + mPremultipledAlphaEnabled( preMultipliedAlphaEnabled ), + mShaderChanged( false ) { if( blendingBitmask != 0u ) { @@ -216,8 +217,12 @@ void Renderer::SetUniforms( BufferIndex bufferIndex, const SceneGraph::NodeDataP if( uniformMapDataProvider.GetUniformMapChanged( bufferIndex ) || node.GetUniformMapChanged(bufferIndex) || - mUniformIndexMap.Count() == 0) + mUniformIndexMap.Count() == 0 || + mShaderChanged ) { + // Reset shader pointer + mShaderChanged = false; + const SceneGraph::CollectedUniformMap& uniformMap = uniformMapDataProvider.GetUniformMap( bufferIndex ); const SceneGraph::CollectedUniformMap& uniformMapNode = node.GetUniformMap( bufferIndex ); @@ -342,7 +347,7 @@ void Renderer::SetUniformFromProperty( BufferIndex bufferIndex, Program& program } } -bool Renderer::BindTextures( Context& context, Program& program ) +bool Renderer::BindTextures( Context& context, Program& program, Vector& boundTextures ) { uint32_t textureUnit = 0; bool result = true; @@ -355,6 +360,7 @@ bool Renderer::BindTextures( Context& context, Program& program ) if( textures[i] ) { result = textures[i]->Bind(context, textureUnit, samplers[i] ); + boundTextures.PushBack( textures[i]->GetId() ); if( result && program.GetSamplerUniformLocation( i, uniformLocation ) ) { program.SetUniform1i( uniformLocation, textureUnit ); @@ -519,7 +525,8 @@ void Renderer::Render( Context& context, const Matrix& viewMatrix, const Matrix& projectionMatrix, const Vector3& size, - bool blend ) + bool blend, + Vector& boundTextures ) { // Get the program to use: Program* program = mRenderDataProvider->GetShader().GetProgram(); @@ -538,7 +545,7 @@ void Renderer::Render( Context& context, // Take the program into use so we can send uniforms to it program->Use(); - if( DALI_LIKELY( BindTextures( context, *program ) ) ) + if( DALI_LIKELY( BindTextures( context, *program, boundTextures ) ) ) { // Only set up and draw if we have textures and they are all valid @@ -584,6 +591,11 @@ void Renderer::SetSortAttributes( BufferIndex bufferIndex, sortAttributes.geometry = mGeometry; } +void Renderer::SetShaderChanged( bool value ) +{ + mShaderChanged = value; +} + } // namespace SceneGraph } // namespace Internal