Cleanup: remove contributors for CMake files
[blender.git] / intern / ghost / intern / GHOST_ContextEGL.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2013 Blender Foundation.
17  * All rights reserved.
18  */
19
20 /** \file ghost/intern/GHOST_ContextEGL.h
21  *  \ingroup GHOST
22  */
23
24 #ifndef __GHOST_CONTEXTEGL_H__
25 #define __GHOST_CONTEXTEGL_H__
26
27 #include "GHOST_Context.h"
28
29 #include <GL/eglew.h>
30
31 #ifndef GHOST_OPENGL_EGL_CONTEXT_FLAGS
32 #define GHOST_OPENGL_EGL_CONTEXT_FLAGS 0
33 #endif
34
35 #ifndef GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY
36 #define GHOST_OPENGL_EGL_RESET_NOTIFICATION_STRATEGY 0
37 #endif
38
39
40 class GHOST_ContextEGL : public GHOST_Context
41 {
42 public:
43         /**
44          * Constructor.
45          */
46         GHOST_ContextEGL(
47                 bool stereoVisual,
48                 GHOST_TUns16 numOfAASamples,
49                 EGLNativeWindowType nativeWindow,
50                 EGLNativeDisplayType nativeDisplay,
51                 EGLint contextProfileMask,
52                 EGLint contextMajorVersion,
53                 EGLint contextMinorVersion,
54                 EGLint contextFlags,
55                 EGLint contextResetNotificationStrategy,
56                 EGLenum api);
57
58         /**
59          * Destructor.
60          */
61         ~GHOST_ContextEGL();
62
63         /**
64          * Swaps front and back buffers of a window.
65          * \return  A boolean success indicator.
66          */
67         GHOST_TSuccess swapBuffers();
68
69         /**
70          * Activates the drawing context of this window.
71          * \return  A boolean success indicator.
72          */
73         GHOST_TSuccess activateDrawingContext();
74
75         /**
76          * Release the drawing context of the calling thread.
77          * \return  A boolean success indicator.
78          */
79         GHOST_TSuccess releaseDrawingContext();
80
81         /**
82          * Call immediately after new to initialize.  If this fails then immediately delete the object.
83          * \return Indication as to whether initialization has succeeded.
84          */
85         GHOST_TSuccess initializeDrawingContext();
86
87         /**
88          * Removes references to native handles from this context and then returns
89          * \return GHOST_kSuccess if it is OK for the parent to release the handles and
90          * GHOST_kFailure if releasing the handles will interfere with sharing
91          */
92         GHOST_TSuccess releaseNativeHandles();
93
94         /**
95          * Sets the swap interval for swapBuffers.
96          * \param interval The swap interval to use.
97          * \return A boolean success indicator.
98          */
99         GHOST_TSuccess setSwapInterval(int interval);
100
101         /**
102          * Gets the current swap interval for swapBuffers.
103          * \param intervalOut Variable to store the swap interval if it can be read.
104          * \return Whether the swap interval can be read.
105          */
106         GHOST_TSuccess getSwapInterval(int &intervalOut);
107
108 private:
109         void initContextEGLEW();
110
111         EGLNativeDisplayType m_nativeDisplay;
112         EGLNativeWindowType  m_nativeWindow;
113
114         const EGLint m_contextProfileMask;
115         const EGLint m_contextMajorVersion;
116         const EGLint m_contextMinorVersion;
117         const EGLint m_contextFlags;
118         const EGLint m_contextResetNotificationStrategy;
119
120         const EGLenum m_api;
121
122         EGLContext m_context;
123         EGLSurface m_surface;
124         EGLDisplay m_display;
125
126         EGLint m_swap_interval;
127
128         EGLContext &m_sharedContext;
129         EGLint     &m_sharedCount;
130
131         static EGLContext s_gl_sharedContext;
132         static EGLint     s_gl_sharedCount;
133
134         static EGLContext s_gles_sharedContext;
135         static EGLint     s_gles_sharedCount;
136
137         static EGLContext s_vg_sharedContext;
138         static EGLint     s_vg_sharedCount;
139
140 #ifdef WITH_GL_ANGLE
141         static HMODULE s_d3dcompiler;
142 #endif
143 };
144
145 #endif // __GHOST_CONTEXTEGL_H__