+ const Vector<Gradient::GradientStop>& stops( mGradient->GetStops() );
+ Property::Array offsets;
+ Property::Array colors;
+ for( unsigned int i=0; i<stops.Count(); i++ )
+ {
+ offsets.PushBack( stops[i].mOffset );
+ if( EqualsZero(stops[i].mStopColor.a) )
+ {
+ colors.PushBack( Vector4::ZERO );
+ }
+ else
+ {
+ colors.PushBack( Vector4( stops[i].mStopColor.r / stops[i].mStopColor.a,
+ stops[i].mStopColor.g / stops[i].mStopColor.a,
+ stops[i].mStopColor.b / stops[i].mStopColor.a,
+ stops[i].mStopColor.a));
+ }
+ }
+
+ map.Insert( STOP_OFFSET_NAME, offsets );
+ map.Insert( STOP_COLOR_NAME, colors );
+
+ if( &typeid( *mGradient ) == &typeid(LinearGradient) )
+ {
+ LinearGradient* gradient = static_cast<LinearGradient*>( mGradient.Get() );
+ map.Insert( START_POSITION_NAME, gradient->GetStartPosition() );
+ map.Insert( END_POSITION_NAME, gradient->GetEndPosition() );
+ }
+ else // if( &typeid( *mGradient ) == &typeid(RadialGradient) )
+ {
+ RadialGradient* gradient = static_cast<RadialGradient*>( mGradient.Get() );
+ map.Insert( CENTER_NAME, gradient->GetCenter() );
+ map.Insert( RADIUS_NAME, gradient->GetRadius() );
+ }
+}
+
+void GradientRenderer::InitializeRenderer()
+{
+ Geometry geometry = mFactoryCache.GetGeometry( RendererFactoryCache::QUAD_GEOMETRY );
+ if( !geometry )
+ {
+ geometry = Geometry::QUAD();
+ mFactoryCache.SaveGeometry( RendererFactoryCache::QUAD_GEOMETRY, geometry );
+ }
+
+ Gradient::GradientUnits gradientUnits = mGradient->GetGradientUnits();
+ RendererFactoryCache::ShaderType shaderType = GetShaderType( mGradientType, gradientUnits );
+ Shader shader = mFactoryCache.GetShader( shaderType );
+ if( !shader )
+ {
+ shader = Shader::New( VERTEX_SHADER[gradientUnits], FRAGMENT_SHADER[ mGradientType ] );
+ mFactoryCache.SaveShader( shaderType, shader );
+ }
+
+ //Set up the texture set
+ TextureSet textureSet = TextureSet::New();
+ Dali::Texture lookupTexture = mGradient->GenerateLookupTexture();
+ textureSet.SetTexture( 0u, lookupTexture );
+ Dali::WrapMode::Type wrap = GetWrapMode( mGradient->GetSpreadMethod() );
+ Sampler sampler = Sampler::New();