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