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