Add a mechanism to specify a callback on every frame
[platform/core/uifw/dali-core.git] / dali / devel-api / update / frame-callback-interface.h
1 #ifndef DALI_FRAME_CALLBACK_INTERFACE_H
2 #define DALI_FRAME_CALLBACK_INTERFACE_H
3
4 /*
5  * Copyright (c) 2018 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 // INTERNAL INCLUDES
22 #include <dali/public-api/common/dali-common.h>
23
24 namespace Dali
25 {
26
27 class UpdateProxy;
28
29 /**
30  * @brief This interface should be implemented if a callback is required on every frame.
31  *
32  * The Update() method is called from the update-thread after the scene has been updated, and is ready to render.
33  *
34  * As this method is called from the update-thread, no event thread APIs (e.g. Actor::Get...) can be called.
35  * This will invariably lead to crashes.
36  *
37  * Instead, setting and retrieving the values should be done by using the UpdateProxy class returned as a parameter to
38  * the Update() method.
39  *
40  * Actors can be identified using Actor IDs which can be retrieved using Actor::GetId() in the event-thread.
41  * However, calling Actor::GetId() will lead to problems if it is called from the update-thread.
42  * Instead, the Actor IDs should be stored by the implementation of this class or passed via a thread-safe manner from
43  * the event-thread.
44  */
45 class DALI_CORE_API FrameCallbackInterface
46 {
47 public:
48
49   /**
50    * @brief Called from the update-thread after the scene has been updated, and is ready to render.
51    * @param[in]  updateProxy  Use this to get/set required values for the Actor.
52    * @param[in]  elapsedSeconds  Time elapsed time since the last frame (in seconds)
53    * @see FrameCallbackInterface
54    */
55   virtual void Update( UpdateProxy& updateProxy, float elapsedSeconds ) = 0;
56
57 protected:
58
59   /**
60    * @brief Protected constructor.
61    */
62   FrameCallbackInterface() {}
63
64   /**
65    * @brief Protected virtual destructor.
66    */
67   virtual ~FrameCallbackInterface() {}
68 };
69
70 } // namespace Dali
71
72 #endif // DALI_FRAME_CALLBACK_INTERFACE_H