mDepthWriteMode( depthWriteMode ),
mDepthTestMode( depthTestMode ),
mUpdateAttributesLocation( true ),
- mPremultipledAlphaEnabled( preMultipliedAlphaEnabled )
+ mPremultipledAlphaEnabled( preMultipliedAlphaEnabled ),
+ mShaderChanged( false )
{
if( blendingBitmask != 0u )
{
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 );
}
}
-bool Renderer::BindTextures( Context& context, Program& program )
+bool Renderer::BindTextures( Context& context, Program& program, Vector<GLuint>& boundTextures )
{
uint32_t textureUnit = 0;
bool result = true;
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 );
const Matrix& viewMatrix,
const Matrix& projectionMatrix,
const Vector3& size,
- bool blend )
+ bool blend,
+ Vector<GLuint>& boundTextures )
{
// Get the program to use:
Program* program = mRenderDataProvider->GetShader().GetProgram();
// 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
sortAttributes.geometry = mGeometry;
}
+void Renderer::SetShaderChanged( bool value )
+{
+ mShaderChanged = value;
+}
+
} // namespace SceneGraph
} // namespace Internal