[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-scene3d / utc-Dali-ShaderOption.cpp
1 /*
2  * Copyright (c) 2023 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <dali-test-suite-utils.h>
19 #include <dali-toolkit/dali-toolkit.h>
20 #include <string_view>
21 #include "dali-scene3d/public-api/loader/shader-option.h"
22
23 using namespace Dali;
24 using namespace Dali::Toolkit;
25
26 void shader_definition_option_startup(void)
27 {
28   test_return_value = TET_UNDEF;
29 }
30
31 void shader_definition_option_cleanup(void)
32 {
33   test_return_value = TET_PASS;
34 }
35
36 int UtcDaliShaderOptionInit(void)
37 {
38   Scene3D::Loader::ShaderOption option;
39   DALI_TEST_EQUALS(option.GetOptionHash(), 0u, TEST_LOCATION);
40   END_TEST;
41 }
42
43 int UtcDaliShaderOptionSetTransparency(void)
44 {
45   Scene3D::Loader::ShaderOption option;
46   DALI_TEST_EQUALS(option.GetOptionHash(), 0u, TEST_LOCATION);
47
48   option.SetTransparency();
49   DALI_TEST_NOT_EQUALS(option.GetOptionHash(), static_cast<uint64_t>(0u), 0.1f, TEST_LOCATION);
50
51   END_TEST;
52 }
53
54 int UtcDaliShaderOptionAddOption(void)
55 {
56   Scene3D::Loader::ShaderOption option;
57   DALI_TEST_EQUALS(option.GetOptionHash(), 0u, TEST_LOCATION);
58
59   Scene3D::Loader::ShaderOption::Type types[19] = {
60     Scene3D::Loader::ShaderOption::Type::GLTF_CHANNELS,
61     Scene3D::Loader::ShaderOption::Type::THREE_TEXTURE,
62     Scene3D::Loader::ShaderOption::Type::BASE_COLOR_TEXTURE,
63     Scene3D::Loader::ShaderOption::Type::METALLIC_ROUGHNESS_TEXTURE,
64     Scene3D::Loader::ShaderOption::Type::NORMAL_TEXTURE,
65     Scene3D::Loader::ShaderOption::Type::OCCLUSION,
66     Scene3D::Loader::ShaderOption::Type::EMISSIVE,
67     Scene3D::Loader::ShaderOption::Type::ALPHA_TEST,
68     Scene3D::Loader::ShaderOption::Type::SUBSURFACE,
69     Scene3D::Loader::ShaderOption::Type::SPECULAR,
70     Scene3D::Loader::ShaderOption::Type::SPECULAR_COLOR,
71     Scene3D::Loader::ShaderOption::Type::SKINNING,
72     Scene3D::Loader::ShaderOption::Type::FLIP_UVS_VERTICAL,
73     Scene3D::Loader::ShaderOption::Type::COLOR_ATTRIBUTE,
74     Scene3D::Loader::ShaderOption::Type::VEC4_TANGENT,
75     Scene3D::Loader::ShaderOption::Type::MORPH_POSITION,
76     Scene3D::Loader::ShaderOption::Type::MORPH_NORMAL,
77     Scene3D::Loader::ShaderOption::Type::MORPH_TANGENT,
78     Scene3D::Loader::ShaderOption::Type::MORPH_VERSION_2_0};
79
80   uint64_t hash = 0u;
81   for(uint32_t i = 0; i < 19; ++i)
82   {
83     hash |= (1 << static_cast<uint32_t>(types[i]));
84     option.AddOption(types[i]);
85     DALI_TEST_EQUALS(option.GetOptionHash(), hash, TEST_LOCATION);
86   }
87
88   END_TEST;
89 }
90
91 int UtcDaliShaderOptionGetDefines(void)
92 {
93   Scene3D::Loader::ShaderOption option;
94   DALI_TEST_EQUALS(option.GetOptionHash(), 0u, TEST_LOCATION);
95
96   Scene3D::Loader::ShaderOption::Type types[19] = {
97     Scene3D::Loader::ShaderOption::Type::GLTF_CHANNELS,
98     Scene3D::Loader::ShaderOption::Type::THREE_TEXTURE,
99     Scene3D::Loader::ShaderOption::Type::BASE_COLOR_TEXTURE,
100     Scene3D::Loader::ShaderOption::Type::METALLIC_ROUGHNESS_TEXTURE,
101     Scene3D::Loader::ShaderOption::Type::NORMAL_TEXTURE,
102     Scene3D::Loader::ShaderOption::Type::OCCLUSION,
103     Scene3D::Loader::ShaderOption::Type::EMISSIVE,
104     Scene3D::Loader::ShaderOption::Type::ALPHA_TEST,
105     Scene3D::Loader::ShaderOption::Type::SUBSURFACE,
106     Scene3D::Loader::ShaderOption::Type::SPECULAR,
107     Scene3D::Loader::ShaderOption::Type::SPECULAR_COLOR,
108     Scene3D::Loader::ShaderOption::Type::SKINNING,
109     Scene3D::Loader::ShaderOption::Type::FLIP_UVS_VERTICAL,
110     Scene3D::Loader::ShaderOption::Type::COLOR_ATTRIBUTE,
111     Scene3D::Loader::ShaderOption::Type::VEC4_TANGENT,
112     Scene3D::Loader::ShaderOption::Type::MORPH_POSITION,
113     Scene3D::Loader::ShaderOption::Type::MORPH_NORMAL,
114     Scene3D::Loader::ShaderOption::Type::MORPH_TANGENT,
115     Scene3D::Loader::ShaderOption::Type::MORPH_VERSION_2_0};
116
117   uint64_t hash = 0u;
118   for(uint32_t i = 0; i < 19; ++i)
119   {
120     hash |= (1 << static_cast<uint32_t>(types[i]));
121     option.AddOption(types[i]);
122     DALI_TEST_EQUALS(option.GetOptionHash(), hash, TEST_LOCATION);
123
124     std::vector<std::string> defines;
125     option.GetDefines(defines);
126     DALI_TEST_EQUALS(defines.size(), i + 1, TEST_LOCATION);
127     for(uint32_t j = 0; j < defines.size(); ++j)
128     {
129       DALI_TEST_EQUALS(defines[j], option.GetDefineKeyword(types[j]), TEST_LOCATION);
130     }
131   }
132
133   END_TEST;
134 }