X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Frenderers%2Fnpatch%2Fnpatch-renderer.cpp;h=70961badd4f000d1613c850e41eb2cceacb14f84;hb=a4246093982a7c45fd622253d8245e447878a1af;hp=e13e85d97f3ed961534fb5e59385063409b570b3;hpb=4c6d34154c81cf86b4c3662b81e1223f3326ceb5;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/renderers/npatch/npatch-renderer.cpp b/dali-toolkit/internal/controls/renderers/npatch/npatch-renderer.cpp index e13e85d..70961ba 100644 --- a/dali-toolkit/internal/controls/renderers/npatch/npatch-renderer.cpp +++ b/dali-toolkit/internal/controls/renderers/npatch/npatch-renderer.cpp @@ -308,24 +308,53 @@ Geometry NPatchRenderer::CreateGeometry() Shader NPatchRenderer::CreateShader() { Shader shader; - if( mStretchPixelsX.Size() == 1 && mStretchPixelsY.Size() == 1 ) + if( !mImpl->mCustomShader ) { - shader = mFactoryCache.GetShader( RendererFactoryCache::NINE_PATCH_SHADER ); - if( !shader ) + if( mStretchPixelsX.Size() == 1 && mStretchPixelsY.Size() == 1 ) + { + shader = mFactoryCache.GetShader( RendererFactoryCache::NINE_PATCH_SHADER ); + if( !shader ) + { + shader = Shader::New( VERTEX_SHADER_3X3, FRAGMENT_SHADER ); + mFactoryCache.SaveShader( RendererFactoryCache::NINE_PATCH_SHADER, shader ); + } + } + else if( mStretchPixelsX.Size() > 0 || mStretchPixelsY.Size() > 0) { - shader = Shader::New( VERTEX_SHADER_3X3, FRAGMENT_SHADER ); - mFactoryCache.SaveShader( RendererFactoryCache::NINE_PATCH_SHADER, shader ); + std::stringstream vertexShader; + vertexShader << "#define FACTOR_SIZE_X " << mStretchPixelsX.Size() + 2 << "\n" + << "#define FACTOR_SIZE_Y " << mStretchPixelsY.Size() + 2 << "\n" + << VERTEX_SHADER; + + shader = Shader::New( vertexShader.str(), FRAGMENT_SHADER ); } } - else if( mStretchPixelsX.Size() > 0 || mStretchPixelsY.Size() > 0) + else { - std::stringstream vertexShader; - vertexShader << "#define FACTOR_SIZE_X " << mStretchPixelsX.Size() + 2 << "\n" - << "#define FACTOR_SIZE_Y " << mStretchPixelsY.Size() + 2 << "\n" - << VERTEX_SHADER; + const char* fragmentShader = FRAGMENT_SHADER; + Dali::Shader::ShaderHints hints = Dali::Shader::HINT_NONE; - shader = Shader::New( vertexShader.str(), FRAGMENT_SHADER ); + if( !mImpl->mCustomShader->mFragmentShader.empty() ) + { + fragmentShader = mImpl->mCustomShader->mFragmentShader.c_str(); + } + hints = mImpl->mCustomShader->mHints; + + if( mStretchPixelsX.Size() == 1 && mStretchPixelsY.Size() == 1 ) + { + shader = Shader::New( VERTEX_SHADER_3X3, fragmentShader, hints ); + } + else if( mStretchPixelsX.Size() > 0 || mStretchPixelsY.Size() > 0) + { + std::stringstream vertexShader; + vertexShader << "#define FACTOR_SIZE_X " << mStretchPixelsX.Size() + 2 << "\n" + << "#define FACTOR_SIZE_Y " << mStretchPixelsY.Size() + 2 << "\n" + << VERTEX_SHADER; + + shader = Shader::New( vertexShader.str(), fragmentShader, hints ); + } } + return shader; }