X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Frenderers%2Fcolor%2Fcolor-renderer.cpp;h=3fd6a74a472df2835bf0adee43266b31619e4ac2;hb=87b87263ddda2188a86217cca356932e36e4cd94;hp=ab3306ab483d4a8517a45b1dcd4940ae4fb04bb1;hpb=c560f95435d40fd3980cd5f92da65c9f28f440e7;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp b/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp index ab3306a..3fd6a74 100644 --- a/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp +++ b/dali-toolkit/internal/controls/renderers/color/color-renderer.cpp @@ -24,6 +24,7 @@ //INTERNAL INCLUDES #include #include +#include #include namespace Dali @@ -37,9 +38,7 @@ namespace Internal 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 @@ -56,17 +55,18 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( 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 ) { } @@ -74,24 +74,10 @@ 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) ) ) + if( !( color && color->Get(mMixColor) ) ) { DALI_LOG_ERROR( "Fail to provide a color to the ColorRenderer object" ); } @@ -116,13 +102,54 @@ void ColorRenderer::SetOffset( const Vector2& offset ) //ToDo: renderer applies the offset } -void ColorRenderer::SetOnStage( Actor& actor ) +void ColorRenderer::DoSetOnStage( Actor& actor ) +{ + InitializeRenderer(); +} + +void ColorRenderer::DoCreatePropertyMap( Property::Map& map ) const +{ + map.Clear(); + map.Insert( RENDERER_TYPE, COLOR_RENDERER ); + map.Insert( COLOR_NAME, mMixColor ); +} + +void ColorRenderer::InitializeRenderer() { - ControlRenderer::SetOnStage(actor); - (mImpl->mRenderer).RegisterProperty( COLOR_UNIFORM_NAME, mBlendColor ); - if( mBlendColor.a < 1.f ) + Geometry geometry = mFactoryCache.GetGeometry( RendererFactoryCache::QUAD_GEOMETRY ); + if( !geometry ) + { + geometry = Geometry::QUAD(); + 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 ); + } } }