[SRUK] Initial copy from Tizen 2.2 version
[platform/core/uifw/dali-core.git] / dali / integration-api / gl-sync-abstraction.h
1 #ifndef __DALI_INTEGRATION_GL_SYNC_ABSTRACTION_H__
2 #define __DALI_INTEGRATION_GL_SYNC_ABSTRACTION_H__
3
4 //
5 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
6 //
7 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 #include <dali/public-api/common/dali-common.h>
21
22 namespace Dali
23 {
24 namespace Integration
25 {
26
27 /**
28  * This abstraction defines an API for syncing CPU with GPU.
29  * A typical use case is to determine when GL draw calls have finished drawing
30  * to a framebuffer.
31  */
32 class DALI_IMPORT_API GlSyncAbstraction
33 {
34 protected:
35   /**
36    * Virtual protected destructor, no deletion through this interface
37    */
38   virtual ~GlSyncAbstraction() {}
39
40 public:
41
42   class SyncObject
43   {
44   protected:
45     /**
46      * Virtual protected destructor, no deletion through this interface. This prevents
47      * Core from deleting SyncObjects - only Adaptor implementation is able to delete
48      * them.
49      */
50     virtual ~SyncObject() {}
51
52   public:
53
54     /**
55      * Determine if the synchronisation object has been signalled.
56      * @return false if the sync object has not been signalled, true if it has been signalled (and
57      * can now be destroyed)
58      */
59     virtual bool IsSynced() = 0;
60   };
61
62   /**
63    * Create a synchronisation object based on the resource id, typically that of
64    * a framebuffer texture. It can then be polled using the same resource id.
65    * @return A pointer to an opaque sync object
66    */
67   virtual SyncObject* CreateSyncObject() = 0;
68
69   /**
70    * Destroy the synchronisation object.
71    * @param[in] syncObject The sync object to destroy
72    */
73   virtual void DestroySyncObject(SyncObject* syncObject) = 0;
74 };
75
76 } // namespace Integration
77 } // namespace Dali
78
79 #endif // __DALI_INTEGRATION_GL_SYNC_ABSTRACTION_H__