X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fpage-turn-view%2Fpage-turn-book-spine-effect.h;h=e5e95f80a788767c0b8ef0dae159ef7bf7edd01c;hp=548f13c12f0803d72cc2390f6a6c3eacee7c4183;hb=9ddd5fea6278d06b8874988498c7c4c6508750ba;hpb=d9c164e4530e354cd14dc4a1a658070ba55e99b8 diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h b/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h index 548f13c..e5e95f8 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h @@ -1,8 +1,8 @@ -#ifndef __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__ -#define __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__ +#ifndef DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H +#define DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H /* - * Copyright (c) 2015 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,95 +18,45 @@ * */ -// EXTERNAL INCLUDES -#include +// INTERNAL INCLUDES +#include +#include namespace Dali { - namespace Toolkit { - namespace Internal { - /** * @brief Creates a new PageTurnBookSpineEffect * This is an assisting effect of PageTurnEffect to display a book spine on _static_ pages, and also to flip the image horizontally when needed. * * When the page is turned over in landscape, call * SetIsBackImageVisible(true), this effect can display the back image - * correctly after the imageActor been rotated 180 degrees. To + * correctly after the page been rotated 180 degrees. To * display the pages visually consistent with its turning state, * please set the uniforms with the same values as the PageTurnEffect. * * Animatable/Constrainable uniforms: - * "uShadowWidth" - The width of shadow to be pageSize * shadowWidth. This shadow appears at the edges of the actor - * which is not visible on static pages * "uSpineShadowParameter" - The two parameters are the major&minor radius (in pixels) to form an ellipse shape. The top-left - * quarter of this ellipse is used to calculate spine normal for simulating shadow - * "uIsBackImageVisible" - Set whether the current page is with its backside visible. Need to pass the parameter as true for - * the page which is turned over but still visible in Landscape - * "uPageWidth" - The page width of the PageTurnBookSpineEffect + * quarter of this ellipse is used to calculate spine normal for simulating shadow * + * "uTextureWidth" - 1.0 for single sided page, + * 2.0 for double sided image which has left half part as page front side and right half part as page back side. * - * @return A handle to a newly allocated ShaderEffect + * @return The newly created Property::Map with the page turn book spine effect **/ -inline ShaderEffect CreatePageTurnBookSpineEffect() +inline Property::Map CreatePageTurnBookSpineEffect() { - std::string vertexSource( - "precision mediump float;\n" - "uniform float uShadowWidth;\n" - " void main()\n" - " {\n" - " gl_Position = uProjection * uModelView * vec4(aPosition, 1.0);\n" - " vTexCoord.x = (aTexCoord.x-sTextureRect.s) /( 1.0 - uShadowWidth ) + sTextureRect.s;\n" - " vTexCoord.y = ( aTexCoord.y-sTextureRect.t-0.5*uShadowWidth*(sTextureRect.q-sTextureRect.t) )/( 1.0 - uShadowWidth ) + sTextureRect.t;\n" - " }"); - - // the simplified version of the fragment shader of page turn effect - std::string fragmentSource( - "precision mediump float;\n" - "uniform float uIsBackImageVisible;\n" - "uniform float uPageWidth;\n" - "uniform vec2 uSpineShadowParameter;\n" - " void main()\n" - " {\n" - // leave the border for display shadow, not visible( out of the screen ) when the page is static - " if( vTexCoord.y > sTextureRect.q || vTexCoord.y < sTextureRect.t || vTexCoord.x > sTextureRect.p )\n" - " {\n" - " gl_FragColor = vec4( 0.0 );\n" - " }\n" - " else \n" - " { \n" - // flip the image horizontally by changing the x component of the texture coordinate - " if( uIsBackImageVisible == 1.0 ) gl_FragColor = texture2D( sTexture, vec2( sTextureRect.p+sTextureRect.s-vTexCoord.x, vTexCoord.y ) ) * uColor; \n" - " else gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n" - " \n" - // display book spine, a stripe of shadowed texture - " float pixelPos = (vTexCoord.x-sTextureRect.s)*uPageWidth; \n" - " if(pixelPos < uSpineShadowParameter.x) \n" - " {\n" - " float x = pixelPos - uSpineShadowParameter.x;\n" - " float y = sqrt( uSpineShadowParameter.x*uSpineShadowParameter.x - x*x );\n" - " vec2 spineNormal = normalize(vec2(uSpineShadowParameter.y*x/uSpineShadowParameter.x, y));\n" - " gl_FragColor.rgb *= spineNormal.y; \n" - " }" - " }\n" - " }" ); - - const float DEFAULT_SHADOW_WIDTH(0.15f); - const Vector2 DEFAULT_SPINE_SHADOW_PARAMETER(50.0f, 20.0f); - - ShaderEffect shaderEffect = ShaderEffect::New( vertexSource, fragmentSource ); + Property::Map map; - shaderEffect.SetUniform( "uIsBackImageVisible", -1.f ); - shaderEffect.SetUniform( "uShadowWidth", DEFAULT_SHADOW_WIDTH ); - shaderEffect.SetUniform( "uSpineShadowParameter", DEFAULT_SPINE_SHADOW_PARAMETER ); + Property::Map customShader; - float defaultPageWidth = Dali::Stage::GetCurrent().GetSize().x; - shaderEffect.SetUniform( "uPageWidth", defaultPageWidth/(1.f-DEFAULT_SHADOW_WIDTH) ); + customShader[Toolkit::Visual::Shader::Property::VERTEX_SHADER] = SHADER_PAGE_TURN_BOOK_SPINE_EFFECT_VERT.data(); + customShader[Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = SHADER_PAGE_TURN_BOOK_SPINE_EFFECT_FRAG.data(); - return shaderEffect; + map[Toolkit::Visual::Property::SHADER] = customShader; + return map; } } //namespace Internal @@ -115,4 +65,4 @@ inline ShaderEffect CreatePageTurnBookSpineEffect() } // namespace Dali -#endif /* __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__ */ +#endif // DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H