//INTERNAL INCLUDES
#include <dali-toolkit/internal/controls/renderers/renderer-factory-impl.h>
#include <dali-toolkit/internal/controls/renderers/renderer-factory-cache.h>
+#include <dali-toolkit/internal/controls/renderers/renderer-string-constants.h>
#include <dali-toolkit/internal/controls/renderers/control-renderer-data-impl.h>
namespace Dali
namespace
{
-const char * const COLOR_NAME("blend-color");
-const char * const COLOR_UNIFORM_NAME("uBlendColor");
-
+const char * const COLOR_NAME("mixColor");
const char* VERTEX_SHADER = DALI_COMPOSE_SHADER(
attribute mediump vec2 aPosition;\n
const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(
uniform lowp vec4 uColor;\n
- uniform lowp vec4 uBlendColor;\n
+ uniform lowp vec4 mixColor;\n
\n
void main()\n
{\n
- gl_FragColor = uBlendColor*uColor;\n
+ gl_FragColor = mixColor*uColor;\n
}\n
);
}
-ColorRenderer::ColorRenderer()
-: ControlRenderer()
+ColorRenderer::ColorRenderer( RendererFactoryCache& factoryCache )
+: ControlRenderer( factoryCache ),
+ mMixColorIndex( Property::INVALID_INDEX )
{
}
{
}
-void ColorRenderer::Initialize( RendererFactoryCache& factoryCache, const Property::Map& propertyMap )
+void ColorRenderer::DoInitialize( Actor& actor, const Property::Map& propertyMap )
{
- mImpl->mGeometry = factoryCache.GetGeometry( RendererFactoryCache::QUAD_GEOMETRY );
- if( !(mImpl->mGeometry) )
- {
- mImpl->mGeometry = RendererFactoryCache::CreateQuadGeometry();
- factoryCache.SaveGeometry( RendererFactoryCache::QUAD_GEOMETRY, mImpl->mGeometry );
- }
-
- mImpl->mShader = factoryCache.GetShader( RendererFactoryCache::COLOR_SHADER );
- if( !(mImpl->mShader) )
- {
- mImpl->mShader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
- factoryCache.SaveShader( RendererFactoryCache::COLOR_SHADER, mImpl->mShader );
- }
-
Property::Value* color = propertyMap.Find( COLOR_NAME );
- if( !( color && color->Get(mBlendColor) ) )
+ if( !( color && color->Get(mMixColor) ) )
{
DALI_LOG_ERROR( "Fail to provide a color to the ColorRenderer object" );
}
void ColorRenderer::DoSetOnStage( Actor& actor )
{
- (mImpl->mRenderer).RegisterProperty( COLOR_UNIFORM_NAME, mBlendColor );
- if( mBlendColor.a < 1.f )
+ InitializeRenderer();
+}
+
+void ColorRenderer::DoCreatePropertyMap( Property::Map& map ) const
+{
+ map.Clear();
+ map.Insert( RENDERER_TYPE, COLOR_RENDERER );
+ map.Insert( COLOR_NAME, mMixColor );
+}
+
+void ColorRenderer::InitializeRenderer()
+{
+ Geometry geometry = mFactoryCache.GetGeometry( RendererFactoryCache::QUAD_GEOMETRY );
+ if( !geometry )
+ {
+ geometry = RendererFactoryCache::CreateQuadGeometry();
+ mFactoryCache.SaveGeometry( RendererFactoryCache::QUAD_GEOMETRY, geometry );
+ }
+
+ Shader shader = mFactoryCache.GetShader( RendererFactoryCache::COLOR_SHADER );
+ if( !shader )
+ {
+ shader = Shader::New( VERTEX_SHADER, FRAGMENT_SHADER );
+ mFactoryCache.SaveShader( RendererFactoryCache::COLOR_SHADER, shader );
+ }
+
+ mImpl->mRenderer = Renderer::New( geometry, shader );
+
+ mMixColorIndex = mImpl->mRenderer.RegisterProperty( COLOR_NAME, mMixColor );
+ if( mMixColor.a < 1.f )
+ {
+ mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON );
+ }
+}
+
+void ColorRenderer::SetColor(const Vector4& color)
+{
+ mMixColor = color;
+
+ if( mImpl->mRenderer )
{
- (mImpl->mRenderer).GetMaterial().SetBlendMode( BlendingMode::ON );
+ (mImpl->mRenderer).SetProperty( mMixColorIndex, color );
+ if( color.a < 1.f )
+ {
+ mImpl->mRenderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON );
+ }
}
}