X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fgraphics%2Fshaders%2Fcolor-visual-shader.frag;h=36a410420963cd5f6f2eaddc8f3cbaaa194a2b3f;hp=3e3d19d513cc113725a026b5de165685f73a3a43;hb=6c0714272287978686a586369b1a909f27ab172d;hpb=2de247c304a6f70fa87f465eb1b5417efd6e5f6b diff --git a/dali-toolkit/internal/graphics/shaders/color-visual-shader.frag b/dali-toolkit/internal/graphics/shaders/color-visual-shader.frag index 3e3d19d..36a4104 100644 --- a/dali-toolkit/internal/graphics/shaders/color-visual-shader.frag +++ b/dali-toolkit/internal/graphics/shaders/color-visual-shader.frag @@ -1,36 +1,25 @@ -#ifndef IS_REQUIRED_ROUNDED_CORNER -#define IS_REQUIRED_ROUNDED_CORNER 0 -#endif -#ifndef IS_REQUIRED_BORDERLINE -#define IS_REQUIRED_BORDERLINE 0 -#endif -#ifndef IS_REQUIRED_BLUR -#define IS_REQUIRED_BLUR 0 -#endif - -#if IS_REQUIRED_ROUNDED_CORNER || IS_REQUIRED_BORDERLINE || IS_REQUIRED_BLUR +#if defined(IS_REQUIRED_ROUNDED_CORNER) || defined(IS_REQUIRED_BORDERLINE) || defined(IS_REQUIRED_BLUR) INPUT mediump vec2 vPosition; INPUT mediump vec2 vRectSize; INPUT mediump vec2 vOptRectSize; -#if IS_REQUIRED_ROUNDED_CORNER +#ifdef IS_REQUIRED_ROUNDED_CORNER INPUT mediump vec4 vCornerRadius; #endif #endif uniform lowp vec4 uColor; uniform lowp vec3 mixColor; -#if !IS_REQUIRED_BLUR && IS_REQUIRED_BORDERLINE +#ifdef IS_REQUIRED_BLUR +uniform mediump float blurRadius; +#elif defined(IS_REQUIRED_BORDERLINE) uniform mediump float borderlineWidth; uniform mediump float borderlineOffset; uniform lowp vec4 borderlineColor; uniform lowp vec4 uActorColor; #endif -#if IS_REQUIRED_BLUR -uniform mediump float blurRadius; -#endif -#if IS_REQUIRED_ROUNDED_CORNER || IS_REQUIRED_BORDERLINE || IS_REQUIRED_BLUR +#if defined(IS_REQUIRED_ROUNDED_CORNER) || defined(IS_REQUIRED_BORDERLINE) || defined(IS_REQUIRED_BLUR) // Global values both rounded corner and borderline use // radius of rounded corner on this quadrant @@ -54,7 +43,7 @@ mediump float gMinInlinePotential = 0.0; void calculateCornerRadius() { -#if IS_REQUIRED_ROUNDED_CORNER +#ifdef IS_REQUIRED_ROUNDED_CORNER gRadius = mix( mix(vCornerRadius.x, vCornerRadius.y, sign(vPosition.x) * 0.5 + 0.5), @@ -68,7 +57,8 @@ void calculatePosition() { gFragmentPosition = abs(vPosition) - vRectSize; gCenterPosition = -gRadius; -#if !IS_REQUIRED_BLUR && IS_REQUIRED_BORDERLINE +#ifdef IS_REQUIRED_BLUR +#elif defined(IS_REQUIRED_BORDERLINE) gCenterPosition += borderlineWidth * (clamp(borderlineOffset, -1.0, 1.0) + 1.0) * 0.5; #endif gDiff = gFragmentPosition - gCenterPosition; @@ -86,7 +76,10 @@ void setupMinMaxPotential() gMaxOutlinePotential = gRadius + gPotentialRange; gMinOutlinePotential = gRadius - gPotentialRange; -#if !IS_REQUIRED_BLUR && IS_REQUIRED_BORDERLINE +#ifdef IS_REQUIRED_BLUR + gMaxInlinePotential = gMaxOutlinePotential; + gMinInlinePotential = gMinOutlinePotential; +#elif defined(IS_REQUIRED_BORDERLINE) gMaxInlinePotential = gMaxOutlinePotential - borderlineWidth; gMinInlinePotential = gMinOutlinePotential - borderlineWidth; #else @@ -109,7 +102,8 @@ void PreprocessPotential() } #endif -#if !IS_REQUIRED_BLUR && IS_REQUIRED_BORDERLINE +#ifdef IS_REQUIRED_BLUR +#elif defined(IS_REQUIRED_BORDERLINE) lowp vec4 convertBorderlineColor(lowp vec4 textureColor) { mediump float potential = gPotential; @@ -136,7 +130,7 @@ lowp vec4 convertBorderlineColor(lowp vec4 textureColor) // But if borderlineOpacity > 0.0 and borderlineColor.a == 0.0, we need to apply tCornerRadius. if(borderlineOpacity > 0.0 && borderlineColor.a * borderlineOpacity < 1.0) { - mediump float tCornerRadius = -gCenterPosition; + mediump float tCornerRadius = -gCenterPosition + gPotentialRange; mediump float MaxTexturelinePotential = tCornerRadius + gPotentialRange; mediump float MinTexturelinePotential = tCornerRadius - gPotentialRange; if(potential > MaxTexturelinePotential) @@ -173,7 +167,8 @@ lowp vec4 convertBorderlineColor(lowp vec4 textureColor) } #endif -#if !IS_REQUIRED_BLUR && IS_REQUIRED_ROUNDED_CORNER +#ifdef IS_REQUIRED_BLUR +#elif defined(IS_REQUIRED_ROUNDED_CORNER) mediump float calculateCornerOpacity() { mediump float potential = gPotential; @@ -195,7 +190,7 @@ mediump float calculateCornerOpacity() } #endif -#if IS_REQUIRED_BLUR +#ifdef IS_REQUIRED_BLUR mediump float calculateBlurOpacity() { // Don't use borderline! @@ -203,7 +198,7 @@ mediump float calculateBlurOpacity() mediump float cy = gRadius + blurRadius; mediump float cr = gRadius + blurRadius; -#if IS_REQUIRED_ROUNDED_CORNER +#ifdef IS_REQUIRED_ROUNDED_CORNER // This routine make perfect circle. If corner radius is not exist, we don't consider prefect circle. cy = min(cy, min(vRectSize.x, vRectSize.y) - gRadius); #endif @@ -240,7 +235,7 @@ mediump float calculateBlurOpacity() // highest point of that circle is (x, x + r) and potential is x + r // solve (v.x - x)^2 + (v.y - x)^2 = (cr / cy * x)^2 -#if IS_REQUIRED_ROUNDED_CORNER +#ifdef IS_REQUIRED_ROUNDED_CORNER // Note : lowspec HW cannot calculate here. need to reduce numeric error highp float A = (cr * cr - 2.0 * cy * cy); highp float B = cy * (v.x + v.y); @@ -268,26 +263,32 @@ void main() { lowp vec4 targetColor = vec4(mixColor, 1.0) * uColor; -#if IS_REQUIRED_BLUR || IS_REQUIRED_ROUNDED_CORNER || IS_REQUIRED_BORDERLINE +#if defined(IS_REQUIRED_BLUR) || defined(IS_REQUIRED_ROUNDED_CORNER) || defined(IS_REQUIRED_BORDERLINE) // skip most potential calculate for performance if(abs(vPosition.x) < vOptRectSize.x && abs(vPosition.y) < vOptRectSize.y) { OUT_COLOR = targetColor; - return; } - PreprocessPotential(); + else + { + PreprocessPotential(); +#endif + +#ifdef IS_REQUIRED_BLUR +#elif defined(IS_REQUIRED_BORDERLINE) + targetColor = convertBorderlineColor(targetColor); #endif + OUT_COLOR = targetColor; -#if !IS_REQUIRED_BLUR && IS_REQUIRED_BORDERLINE - targetColor = convertBorderlineColor(targetColor); +#ifdef IS_REQUIRED_BLUR + mediump float opacity = calculateBlurOpacity(); + OUT_COLOR.a *= opacity; +#elif defined(IS_REQUIRED_ROUNDED_CORNER) + mediump float opacity = calculateCornerOpacity(); + OUT_COLOR.a *= opacity; #endif - OUT_COLOR = targetColor; - -#if IS_REQUIRED_BLUR - mediump float opacity = calculateBlurOpacity(); - OUT_COLOR.a *= opacity; -#elif IS_REQUIRED_ROUNDED_CORNER - mediump float opacity = calculateCornerOpacity(); - OUT_COLOR.a *= opacity; + +#if defined(IS_REQUIRED_BLUR) || defined(IS_REQUIRED_ROUNDED_CORNER) || defined(IS_REQUIRED_BORDERLINE) + } #endif }