X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbubble-effect%2Fbubble-effect.h;h=4f4a3e5ea7c0ad4adad5e4810ecd28e65e25944c;hb=06390b11a4bbb71ee3d9a0508ed33cb3aa14d8a3;hp=9d0e24fb65b9f5b925b1f8090f558d2db5e04707;hpb=7f7e821222743c032bdac69f24917fe6f9cbd61a;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/bubble-effect/bubble-effect.h b/dali-toolkit/internal/controls/bubble-effect/bubble-effect.h index 9d0e24f..4f4a3e5 100644 --- a/dali-toolkit/internal/controls/bubble-effect/bubble-effect.h +++ b/dali-toolkit/internal/controls/bubble-effect/bubble-effect.h @@ -1,8 +1,8 @@ -#ifndef __DALI_TOOLKIT_INTERNAL_BUBBLE_EFFECT_H_ -#define __DALI_TOOLKIT_INTERNAL_BUBBLE_EFFECT_H_ +#ifndef DALI_TOOLKIT_INTERNAL_BUBBLE_EFFECT_H +#define DALI_TOOLKIT_INTERNAL_BUBBLE_EFFECT_H /* - * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * Copyright (c) 2016 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. @@ -20,7 +20,8 @@ // EXTERNAL INCLUDES #include -#include +#include +#include namespace Dali { @@ -32,93 +33,16 @@ namespace Internal { /** - * Create the shader to be used by the material + * Create the shader to be used by the renderer * @param[in] numberOfBubble How many groups of uniforms are used to control the bubble movement. * @return A handle to the newly created shader. */ inline Shader CreateBubbleShader( unsigned int numBubble ) { - const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( - attribute mediump float aIndex;\n - attribute mediump vec2 aPosition;\n - attribute highp vec2 aTexCoord;\n - varying mediump vec2 vTexCoord;\n - uniform mediump mat4 uMvpMatrix;\n - // the gravity applied to the y direction - uniform mediump float uGravity;\n - // xy: the emit position of the bubble; zw: the destination of the bubble. - // The bubble is moving from (xy) to (zw plus the y drop influenced by gravity). - uniform vec4 uStartEndPosition[NUMBER_OF_BUBBLE];\n - // The undergoing percentage of the bubble movement. 0.0: start from emit position, 1.0: reach the destination - uniform float uPercentage[NUMBER_OF_BUBBLE];\n - uniform vec2 uInvertedMovementArea;\n - // The bubble number is restricted by the available uniform num. - // To increase the displayed bubble, every uStartEndPosition and uPercentage uniform is applied to a small bunch of bubbles (9 here) - // The offset defines the random offset between bubbles within the bunch. - uniform vec2 uOffset[9];\n - // This uniform is used to change the bubble size during running time - uniform float uDynamicScale;\n - varying float vPercentage;\n - varying vec2 vEffectTexCoord;\n - void main()\n - {\n - vec4 position = vec4( aPosition, 0.0, 1.0 );\n - // The Z coordinate is used to record the bubble index within current mesh actor - int index = int(aIndex); \n - //for some i between 0 ~ NUMBER_OF_BUBBLE-1: i,i+NUMBER_OF_BUBBLE, i+NUMBER_OF_BUBBLE*2, ... (up to i+NUMBER_OF_BUBBLE*8) belongs to the same bunch. - int groupIdx = index / NUMBER_OF_BUBBLE;\n - // The bubbles within the same bunch applies the same uniforms uStartEndPosition[idx] & uPercentage[idx] - int idx = index - groupIdx*NUMBER_OF_BUBBLE;\n - float percentage = uPercentage[idx]; - // early out if uPercentage is (zero || one) setting position to zero (zero sized triangles) - if( percentage <= 0.0 || percentage >= 1.0 )\n - {\n - gl_Position = vec4(0.0);\n - return;\n - }\n - vec4 startAndEnd = uStartEndPosition[idx];\n - // The final position is added up different offset for bubbles - startAndEnd.zw += uOffset[groupIdx];\n - \n - // increase the bubble size from 0% to 100% during the first 1/5 of movement & apply the dynamic scale - // the new xy value containes both the new scale and new bubble position - position.xy *= uDynamicScale*min(percentage*5.0, 1.0);\n - position.xy += mix(startAndEnd.xy, startAndEnd.zw, percentage);\n - // The gravity is g*t*t on the y direction - position.y += uGravity * pow(percentage, 2.0);\n - gl_Position = uMvpMatrix * position;\n - \n - // Add multiple bubble shapes in the effect - vTexCoord = aTexCoord;\n - vPercentage = percentage;\n - // Use the emit position color for the bubble - vEffectTexCoord = startAndEnd.xy * uInvertedMovementArea;\n - }\n - ); - - const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( - varying mediump vec2 vTexCoord;\n - uniform lowp vec4 uColor;\n - uniform sampler2D sBackground;\n - uniform sampler2D sBubbleShape;\n - varying mediump float vPercentage;\n - varying mediump vec2 vEffectTexCoord;\n - \n - void main()\n - {\n - // Get the emit pisition color, and Mix with the actor color - mediump vec4 fragColor = texture2D(sBackground, vEffectTexCoord)*uColor;\n - // Apply the shape defined by the texture contained in the material - // And make the opacity being 0.7, and animate from 0.7 to 0 during the last 1/3 of movement - fragColor.a *= texture2D(sBubbleShape, vTexCoord).a * ( 2.1 - max( vPercentage*2.1, 1.4 ) );\n - gl_FragColor = fragColor;\n - }\n - ); - std::ostringstream vertexShaderStringStream; vertexShaderStringStream << "#define NUMBER_OF_BUBBLE "<< numBubble << "\n" - << VERTEX_SHADER; - Shader shader = Shader::New( vertexShaderStringStream.str(), FRAGMENT_SHADER ); + << SHADER_BUBBLE_EFFECT_VERT; + Shader shader = Shader::New( vertexShaderStringStream.str(), SHADER_BUBBLE_EFFECT_FRAG ); return shader; } @@ -128,4 +52,4 @@ inline Shader CreateBubbleShader( unsigned int numBubble ) } // namespace Toolkit } // namespace Dali -#endif /* __DALI_TOOLKIT_INTERNAL_BUBBLE_EFFECT_H_ */ +#endif // DALI_TOOLKIT_INTERNAL_BUBBLE_EFFECT_H