Clean up the code to build successfully on macOS
[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()
39   {
40   }
41
42 public:
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     }
54
55   public:
56     /**
57      * Determine if the synchronisation object has been signalled.
58      * @return false if the sync object has not been signalled, true if it has been signalled (and
59      * can now be destroyed)
60      */
61     virtual bool IsSynced() = 0;
62   };
63
64   /**
65    * Create a synchronisation object based on the resource id, typically that of
66    * a framebuffer texture. It can then be polled using the same resource id.
67    * @return A pointer to an opaque sync object
68    */
69   virtual SyncObject* CreateSyncObject() = 0;
70
71   /**
72    * Destroy the synchronisation object.
73    * @param[in] syncObject The sync object to destroy
74    */
75   virtual void DestroySyncObject(SyncObject* syncObject) = 0;
76 };
77
78 } // namespace Integration
79 } // namespace Dali
80
81 #endif // DALI_INTEGRATION_GL_SYNC_ABSTRACTION_H