1 #ifndef DALI_TOOLKIT_IMAGE_REGION_EFFECT_H
2 #define DALI_TOOLKIT_IMAGE_REGION_EFFECT_H
5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/public-api/object/property-map.h>
25 #include <dali-toolkit/public-api/visuals/visual-properties.h>
32 * @brief Creates a new ImageRegionEffect
34 * ImageRegionEffect is a custom shader effect to show only a region of an Image actor.
36 * Animatable/Constrainable uniforms:
37 * "uTopLeft" - The top-left corner of the image region. The coordinates are in percentage,
38 * (0,0) being the top-left and (1,1) the bottom right of the original image
39 * "uBottomRight" - The bottom-right corner of the image region. The coordinates are in percentage,
40 * (0,0) being the top-left and (1,1) the bottom right of the original image
42 * @return A property map of the required shader
44 inline Property::Map CreateImageRegionEffect()
46 std::string vertexShader(
47 "attribute mediump vec2 aPosition;\n"
49 "uniform mediump mat4 uMvpMatrix;\n"
50 "uniform vec3 uSize;\n"
51 "uniform vec4 uTextureRect;"
53 "varying vec2 vTexCoord;\n"
55 "uniform mediump vec2 uTopLeft;\n"
56 "uniform mediump vec2 uBottomRight;\n"
59 " mediump vec4 position = vec4(aPosition, 0.0, 1.0);\n"
60 " position.xyz *= uSize;\n"
61 " gl_Position = uMvpMatrix * position;\n"
62 // The line below is doing the same as the following commented lines:
63 //" vec2 imageSize = uTextureRect.zw - uTextureRect.xy;\n"
64 //" vec2 topLeft = uTextureRect.xy + uTopLeft * imageSize;\n"
65 //" vec2 bottomRight = uTextureRect.xy + uBottomRight * imageSize;\n"
66 //" vec2 texCoord = (aTexCoord - uTextureRect.xy) / imageSize;\n"
67 //" vTexCoord = topLeft + texCoord * ( bottomRight - topLeft );\n"
69 " vec2 texCoord = aPosition + vec2(0.5);\n"
70 " vTexCoord = uTextureRect.xy + uTopLeft * ( uTextureRect.zw - uTextureRect.xy ) + ( texCoord - uTextureRect.xy ) * ( uBottomRight - uTopLeft );\n"
75 Property::Map customShader;
76 customShader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
78 map[Toolkit::Visual::Property::SHADER] = customShader;
82 } // namespace Toolkit
86 #endif // DALI_TOOLKIT_IMAGE_REGION_EFFECT_H