X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Frenderers%2Fcolor%2Fcolor-renderer.cpp;h=b6074eb478bb411e1712a293261c2e1aaef1be22;hp=01ebca9ad62f04a8ded76e6b324f34b57fd60404;hb=f3da11c2818c6d17706fbb2417f21b602b3190f5;hpb=4cc88bb89cb6ef65670780554480ecbbdecf0254 diff --git a/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp b/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp index 01ebca9..b6074eb 100644 --- a/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp +++ b/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp @@ -37,7 +37,9 @@ namespace Internal namespace { -const char * const COLOR_NAME("blend-color"); +const char * const RENDERER_TYPE("rendererType"); +const char * const RENDERER_TYPE_VALUE("colorRenderer"); +const char * const COLOR_NAME("blendColor"); const char * const COLOR_UNIFORM_NAME("uBlendColor"); @@ -65,8 +67,9 @@ const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( ); } -ColorRenderer::ColorRenderer() -: ControlRenderer() +ColorRenderer::ColorRenderer( RendererFactoryCache& factoryCache ) +: ControlRenderer( factoryCache ), + mBlendColorIndex( Property::INVALID_INDEX ) { } @@ -74,22 +77,8 @@ ColorRenderer::~ColorRenderer() { } -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) ) ) { @@ -118,10 +107,53 @@ void ColorRenderer::SetOffset( const Vector2& offset ) void ColorRenderer::DoSetOnStage( Actor& actor ) { - (mImpl->mRenderer).RegisterProperty( COLOR_UNIFORM_NAME, mBlendColor ); + InitializeRenderer(); +} + +void ColorRenderer::DoCreatePropertyMap( Property::Map& map ) const +{ + map.Clear(); + map.Insert( RENDERER_TYPE, RENDERER_TYPE_VALUE ); + map.Insert( COLOR_NAME, mBlendColor ); +} + +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 ); + } + + Material material = Material::New( shader ); + mImpl->mRenderer = Renderer::New( geometry, material ); + + mBlendColorIndex = mImpl->mRenderer.RegisterProperty( COLOR_UNIFORM_NAME, mBlendColor ); if( mBlendColor.a < 1.f ) { - (mImpl->mRenderer).GetMaterial().SetBlendMode( BlendingMode::ON ); + mImpl->mRenderer.GetMaterial().SetBlendMode( BlendingMode::ON ); + } +} + +void ColorRenderer::SetColor(const Vector4& color) +{ + mBlendColor = color; + + if( mImpl->mRenderer ) + { + (mImpl->mRenderer).SetProperty( mBlendColorIndex, color ); + if( color.a < 1.f && (mImpl->mRenderer).GetMaterial().GetBlendMode() != BlendingMode::ON) + { + (mImpl->mRenderer).GetMaterial().SetBlendMode( BlendingMode::ON ); + } } }