Cleanup: remove contributors for CMake files
[blender.git] / intern / ghost / intern / GHOST_Context.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_Context.h
21  *  \ingroup GHOST
22  * Declaration of GHOST_Context class.
23  */
24
25 #ifndef __GHOST_CONTEXT_H__
26 #define __GHOST_CONTEXT_H__
27
28 #include "GHOST_IContext.h"
29 #include "GHOST_Types.h"
30
31 #include "glew-mx.h"
32
33 #include <cstdlib> // for NULL
34
35
36 class GHOST_Context : public GHOST_IContext
37 {
38 public:
39         /**
40          * Constructor.
41          * \param stereoVisual          Stereo visual for quad buffered stereo.
42          * \param numOfAASamples        Number of samples used for AA (zero if no AA)
43          */
44         GHOST_Context(bool stereoVisual, GHOST_TUns16 numOfAASamples)
45             : m_stereoVisual(stereoVisual),
46               m_numOfAASamples(numOfAASamples)
47         {}
48
49         /**
50          * Destructor.
51          */
52         virtual ~GHOST_Context() {
53         }
54
55         /**
56          * Swaps front and back buffers of a window.
57          * \return  A boolean success indicator.
58          */
59         virtual GHOST_TSuccess swapBuffers() = 0;
60
61         /**
62          * Activates the drawing context of this window.
63          * \return  A boolean success indicator.
64          */
65         virtual GHOST_TSuccess activateDrawingContext() = 0;
66
67         /**
68          * Release the drawing context of the calling thread.
69          * \return  A boolean success indicator.
70          */
71         virtual GHOST_TSuccess releaseDrawingContext()= 0;
72
73         /**
74          * Call immediately after new to initialize.  If this fails then immediately delete the object.
75          * \return Indication as to whether initialization has succeeded.
76          */
77         virtual GHOST_TSuccess initializeDrawingContext() = 0;
78
79         /**
80          * Updates the drawing context of this window. Needed
81          * whenever the window is changed.
82          * \return Indication of success.
83          */
84         virtual GHOST_TSuccess updateDrawingContext() {
85                 return GHOST_kFailure;
86         }
87
88         /**
89          * Checks if it is OK for a remove the native display
90          * \return Indication as to whether removal has succeeded.
91          */
92         virtual GHOST_TSuccess releaseNativeHandles() = 0;
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         virtual GHOST_TSuccess setSwapInterval(int /*interval*/) {
100                 return GHOST_kFailure;
101         }
102
103         /**
104          * Gets the current swap interval for swapBuffers.
105          * \param intervalOut Variable to store the swap interval if it can be read.
106          * \return Whether the swap interval can be read.
107          */
108         virtual GHOST_TSuccess getSwapInterval(int&) {
109                 return GHOST_kFailure;
110         }
111
112         /**
113          * Stereo visual created. Only necessary for 'real' stereo support,
114          * ie quad buffered stereo. This is not always possible, depends on
115          * the graphics h/w
116          */
117         inline bool isStereoVisual() const {
118                 return m_stereoVisual;
119         }
120
121         /** Number of samples used in anti-aliasing, set to 0 if no AA **/
122         inline GHOST_TUns16 getNumOfAASamples() const {
123                 return m_numOfAASamples;
124         }
125
126 protected:
127         void initContextGLEW();
128
129         bool m_stereoVisual;
130
131         GHOST_TUns16 m_numOfAASamples;
132
133         static void initClearGL();
134
135 #ifdef WITH_CXX_GUARDEDALLOC
136         MEM_CXX_CLASS_ALLOC_FUNCS("GHOST:GHOST_Context")
137 #endif
138 };
139
140
141 #ifdef _WIN32
142 bool win32_chk(bool result, const char *file = NULL, int line = 0, const char *text = NULL);
143 bool win32_silent_chk(bool result);
144
145 #  ifndef NDEBUG
146 #    define WIN32_CHK(x) win32_chk((x), __FILE__, __LINE__, #x)
147 #  else
148 #    define WIN32_CHK(x) win32_chk(x)
149 #  endif
150
151 #define WIN32_CHK_SILENT(x, silent) ((silent) ? win32_silent_chk(x) : WIN32_CHK(x))
152 #endif  /* _WIN32 */
153
154
155 #endif // __GHOST_CONTEXT_H__