X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Fdevel-api%2Fshader-effects%2Fdistance-field-effect.h;h=2a233f3f3b6f69b32f1ed13bbe96a269f2d37284;hp=b963693841e96798241adf0328a948d976582824;hb=20e1c73dd9097276d12197f427ec8e00ab9e5650;hpb=e4d638dd0b325673bbd504aef409676fc5593a9d diff --git a/dali-toolkit/devel-api/shader-effects/distance-field-effect.h b/dali-toolkit/devel-api/shader-effects/distance-field-effect.h index b963693..2a233f3 100644 --- a/dali-toolkit/devel-api/shader-effects/distance-field-effect.h +++ b/dali-toolkit/devel-api/shader-effects/distance-field-effect.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_SHADER_EFFECT_DISTANCEFIELD_H /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,12 +18,11 @@ * */ +// INTERNAL INCLUDES +#include + // EXTERNAL INCLUDES #include -#include - -// INTERNAL INCLUDES -#include namespace Dali { @@ -52,125 +51,7 @@ namespace Toolkit * * @return The newly created Property::Map with the distance field effect */ -inline Dali::Property::Map CreateDistanceFieldEffect() -{ - const char* fragmentShaderPrefix("#extension GL_OES_standard_derivatives : enable\n"); - - const char* fragmentShader( - "varying mediump vec2 vTexCoord;\n" - "\n" - "uniform mediump float uGlowBoundary;\n" - "uniform mediump vec2 uOutlineParams;\n" - "uniform lowp vec4 uOutlineColor;\n" - "uniform lowp vec4 uShadowColor;\n" - "uniform mediump vec2 uShadowOffset;\n" - "uniform lowp vec4 uGlowColor;\n" - "uniform lowp float uDoOutline;\n" - "uniform lowp float uDoShadow;\n" - "uniform lowp float uDoGlow;\n" - "\n" - "uniform sampler2D sTexture;\n" - "uniform lowp vec4 uColor;\n" - "\n" - "void main()\n" - "{\n" - " // sample distance field\n" - " mediump float smoothing = 0.5;\n" - " \n" - " mediump float distance = texture2D(sTexture, vTexCoord).a;\n" - " mediump float smoothWidth = fwidth(distance);\n" - " mediump float alphaFactor = smoothstep(smoothing - smoothWidth, smoothing + smoothWidth, distance);\n" - " lowp vec4 color;\n" - " if (uDoShadow == 0.0)\n" - " {\n" - " mediump float alpha = uColor.a * alphaFactor;\n" - " lowp vec4 rgb = uColor;\n" - "\n" - " if (uDoOutline > 0.0)\n" - " {\n" - " mediump float outlineWidth = uOutlineParams[1] + smoothWidth;\n" - " mediump float outlineBlend = smoothstep(uOutlineParams[0] - outlineWidth, uOutlineParams[0] + outlineWidth, distance);\n" - " alpha = smoothstep(smoothing - smoothWidth, smoothing + smoothWidth, distance);\n" - " rgb = mix(uOutlineColor, uColor, outlineBlend);\n" - " }\n" - "\n" - " if (uDoGlow > 0.0)\n" - " {\n" - " rgb = mix(uGlowColor, rgb, alphaFactor);\n" - " alpha = smoothstep(uGlowBoundary, smoothing, distance);\n" - " }\n" - "\n" - " // set fragment color\n" - " color = vec4(rgb.rgb, alpha);\n" - " }\n" - "\n" - " else // (uDoShadow > 0.0)\n" - " {\n" - " mediump float shadowDistance = texture2D(sTexture, vTexCoord - uShadowOffset).a;\n" - " mediump float inText = alphaFactor;\n" - " mediump float inShadow = smoothstep(smoothing - smoothWidth, smoothing + smoothWidth, shadowDistance);\n" - "\n" - " // inside object, outside shadow\n" - " if (inText == 1.0)\n" - " {\n" - " color = uColor;\n" - " }\n" - " // inside object, outside shadow\n" - " else if ((inText != 0.0) && (inShadow == 0.0))\n" - " {\n" - " color = uColor;\n" - " color.a *= inText;\n" - " }\n" - " // outside object, completely inside shadow\n" - " else if ((inText == 0.0) && (inShadow == 1.0))\n" - " {\n" - " color = uShadowColor;\n" - " }\n" - " // inside object, completely inside shadow\n" - " else if ((inText != 0.0) && (inShadow == 1.0))\n" - " {\n" - " color = mix(uShadowColor, uColor, inText);\n" - " color.a = uShadowColor.a;\n" - " }\n" - " // inside object, inside shadow's border\n" - " else if ((inText != 0.0) && (inShadow != 0.0))\n" - " {\n" - " color = mix(uShadowColor, uColor, inText);\n" - " color.a *= max(inText, inShadow);\n" - " }\n" - " // inside shadow's border\n" - " else if (inShadow != 0.0)\n" - " {\n" - " color = uShadowColor;\n" - " color.a *= inShadow;\n" - " }\n" - " // outside shadow and object\n" - " else \n" - " {\n" - " color.a = 0.0;\n" - " }\n" - "\n" - " }\n" - "\n" - " gl_FragColor = color;\n" - "\n" - "}\n"); - - Property::Map map; - - Property::Map customShader; - - std::string fragmentShaderString; - fragmentShaderString.reserve(strlen(fragmentShaderPrefix) + strlen(fragmentShader)); - fragmentShaderString.append(fragmentShaderPrefix); - fragmentShaderString.append(fragmentShader); - - customShader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShaderString; - customShader[Visual::Shader::Property::HINTS] = Shader::Hint::OUTPUT_IS_TRANSPARENT; - - map[Toolkit::Visual::Property::SHADER] = customShader; - return map; -} +DALI_TOOLKIT_API Dali::Property::Map CreateDistanceFieldEffect(); } // namespace Toolkit