X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Frenderers%2Fgradient%2Fgradient-renderer.cpp;h=6dc25cadfaa758258807ee2679ca4bfe9087f566;hp=71d1a3867bed48f10907aaa84b7fc3d3fd589a16;hb=6861f629112d44d4de1a8a7c70591e2279b951b2;hpb=80e64104f82d3f0e87a58c12934c50b3a009805f diff --git a/dali-toolkit/internal/controls/renderers/gradient/gradient-renderer.cpp b/dali-toolkit/internal/controls/renderers/gradient/gradient-renderer.cpp index 71d1a38..6dc25ca 100644 --- a/dali-toolkit/internal/controls/renderers/gradient/gradient-renderer.cpp +++ b/dali-toolkit/internal/controls/renderers/gradient/gradient-renderer.cpp @@ -155,22 +155,22 @@ DALI_COMPOSE_SHADER( ) }; -Sampler::WrapMode GetWrapMode( Gradient::SpreadMethod spread ) +Dali::WrapMode::Type GetWrapMode( Gradient::SpreadMethod spread ) { switch(spread) { case Gradient::REPEAT: { - return Sampler::REPEAT; + return Dali::WrapMode::REPEAT; } case Gradient::REFLECT: { - return Sampler::MIRRORED_REPEAT; + return Dali::WrapMode::MIRRORED_REPEAT; } case Gradient::PAD: default: { - return Sampler::CLAMP_TO_EDGE; + return Dali::WrapMode::CLAMP_TO_EDGE; } } } @@ -178,8 +178,9 @@ Sampler::WrapMode GetWrapMode( Gradient::SpreadMethod spread ) } -GradientRenderer::GradientRenderer() -:mGradientTransformIndex( Property::INVALID_INDEX ) +GradientRenderer::GradientRenderer( RendererFactoryCache& factoryCache ) +: ControlRenderer( factoryCache ), + mGradientType( LINEAR ) { } @@ -187,15 +188,8 @@ GradientRenderer::~GradientRenderer() { } -void GradientRenderer::DoInitialize( RendererFactoryCache& factoryCache, const Property::Map& propertyMap ) +void GradientRenderer::DoInitialize( 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 ); - } - Gradient::GradientUnits gradientUnits = Gradient::OBJECT_BOUNDING_BOX; Property::Value* unitsValue = propertyMap.Find( GRADIENT_UNITS_NAME ); std::string units; @@ -206,22 +200,13 @@ void GradientRenderer::DoInitialize( RendererFactoryCache& factoryCache, const P gradientUnits = Gradient::USER_SPACE_ON_USE; } - Type gradientType = LINEAR; + mGradientType = LINEAR; if( propertyMap.Find( GRADIENT_RADIUS_NAME )) { - gradientType = RADIAL; - } - - RendererFactoryCache::ShaderType shaderType = GetShaderType( gradientType, gradientUnits ); - - mImpl->mShader = factoryCache.GetShader( shaderType ); - if( !(mImpl->mShader) ) - { - mImpl->mShader = Shader::New( VERTEX_SHADER[gradientUnits], FRAGMENT_SHADER[gradientType] ); - factoryCache.SaveShader( shaderType, mImpl->mShader ); + mGradientType = RADIAL; } - if( NewGradient(gradientType, propertyMap) ) + if( NewGradient( mGradientType, propertyMap ) ) { mGradient->SetGradientUnits( gradientUnits ); mGradientTransform = mGradient->GetAlignmentTransform(); @@ -304,20 +289,48 @@ void GradientRenderer::DoCreatePropertyMap( Property::Map& map ) const } } -void GradientRenderer::DoSetOnStage( Actor& actor ) +void GradientRenderer::InitializeRenderer( Dali::Renderer& renderer ) { - mGradientTransformIndex = (mImpl->mRenderer).RegisterProperty( UNIFORM_ALIGNMENT_MATRIX_NAME, mGradientTransform ); + Geometry geometry = mFactoryCache.GetGeometry( RendererFactoryCache::QUAD_GEOMETRY ); + if( !geometry ) + { + geometry = RendererFactoryCache::CreateQuadGeometry(); + mFactoryCache.SaveGeometry( RendererFactoryCache::QUAD_GEOMETRY, geometry ); + } - Dali::BufferImage lookupTexture = mGradient->GenerateLookupTexture(); - Sampler sampler = Sampler::New( lookupTexture, UNIFORM_TEXTULRE_NAME ); - Sampler::WrapMode wrap = GetWrapMode( mGradient->GetSpreadMethod() ); - sampler.SetWrapMode( wrap, wrap ); + 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 ); + } - Material material = (mImpl->mRenderer).GetMaterial(); - if( material ) + Material material; + if( !renderer ) + { + material = Material::New( shader ); + renderer = Renderer::New( geometry, material ); + } + else { - material.AddSampler( sampler ); + mImpl->mRenderer.SetGeometry( geometry ); + material = mImpl->mRenderer.GetMaterial(); + if( material ) + { + material.SetShader( shader ); + } } + + Dali::BufferImage lookupTexture = mGradient->GenerateLookupTexture(); + Sampler sampler = Sampler::New(); + Dali::WrapMode::Type wrap = GetWrapMode( mGradient->GetSpreadMethod() ); + sampler.SetWrapMode( wrap, wrap ); + + material.AddTexture( lookupTexture, UNIFORM_TEXTULRE_NAME, sampler ); + + renderer.RegisterProperty( UNIFORM_ALIGNMENT_MATRIX_NAME, mGradientTransform ); } bool GradientRenderer::NewGradient(Type gradientType, const Property::Map& propertyMap)