Merge "Clean up the code to build successfully on macOS" into devel/master
[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) 2020 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  * 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 GlSyncAbstraction
33 {
34 protected:
35   /**
36    * Virtual protected destructor, no deletion through this interface
37    */
38   virtual ~GlSyncAbstraction() = default;
39
40 public:
41   class SyncObject
42   {
43   protected:
44     /**
45      * Virtual protected destructor, no deletion through this interface. This prevents
46      * Core from deleting SyncObjects - only Adaptor implementation is able to delete
47      * them.
48      */
49     virtual ~SyncObject() = default;
50
51   public:
52     /**
53      * Determine if the synchronisation object has been signalled.
54      * @return false if the sync object has not been signalled, true if it has been signalled (and
55      * can now be destroyed)
56      */
57     virtual bool IsSynced() = 0;
58   };
59
60   /**
61    * Create a synchronisation object based on the resource id, typically that of
62    * a framebuffer texture. It can then be polled using the same resource id.
63    * @return A pointer to an opaque sync object
64    */
65   virtual SyncObject* CreateSyncObject() = 0;
66
67   /**
68    * Destroy the synchronisation object.
69    * @param[in] syncObject The sync object to destroy
70    */
71   virtual void DestroySyncObject(SyncObject* syncObject) = 0;
72 };
73
74 } // namespace Integration
75 } // namespace Dali
76
77 #endif // DALI_INTEGRATION_GL_SYNC_ABSTRACTION_H