[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / internal / model-components / material-modify-observer.h
1 #ifndef DALI_SCENE3D_MODEL_COMPONENTS_MATERIAL_MODIFY_OBSERVER_H
2 #define DALI_SCENE3D_MODEL_COMPONENTS_MATERIAL_MODIFY_OBSERVER_H
3
4 /*
5  * Copyright (c) 2023 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/devel-api/common/bitwise-enum.h>
23
24 // INTERNAL INCLUDES
25 #include <dali-scene3d/public-api/model-components/material.h>
26
27 namespace Dali
28 {
29 namespace Scene3D
30 {
31 namespace Internal
32 {
33 /**
34  * @brief MaterialModifyObserver is a class to notify that the material has changed.
35  */
36 class MaterialModifyObserver
37 {
38 public:
39   /**
40    * @brief Flag which informations are changed.
41    */
42   enum ModifyFlag
43   {
44     NONE     = 0,
45     TEXTURE  = 1 << 0,
46     SHADER   = 1 << 1,
47     UNIFORM  = 1 << 2,
48     PROPERTY = 1 << 3,
49   };
50
51   /**
52     * @brief Notify to observers that texture is changed.
53     *
54     * @param[in] material The handle material itself. TODO : Are we need this?
55     * @param[in] flag Flag which informations are changed.
56     */
57   virtual void OnMaterialModified(Dali::Scene3D::Material material, ModifyFlag flag) = 0;
58 };
59
60 } // namespace Internal
61
62 } // namespace Scene3D
63
64 // specialization has to be done in the same namespace
65 template<>
66 struct EnableBitMaskOperators<Scene3D::Internal::MaterialModifyObserver::ModifyFlag>
67 {
68   static const bool ENABLE = true;
69 };
70
71 } // namespace Dali
72
73 #endif // DALI_SCENE3D_MODEL_COMPONENTS_MATERIAL_MODIFY_OBSERVER_H